路由钩子函数
路由独享钩子
1.router.beforeEnter是加载到页面之前做的事
这个是路由的独享钩子,
beforeEnter 守卫 只在进入路由时触发,不会在 params、query 或 hash 改变时触发。
全局前置守卫
2.router.beforeEach() 一般用来做一些进入页面的限制。比如没有登录,就不能进入某些页面,只有登录了之后才有权限查看某些页面。。。说白了就是路由拦截。
这里奉上一段路由守卫的代码,
to: 即将要进入的目标(是跳转后的页面路由) from: 当前导航正要离开的路由 (跳转前的)next 是必须要执行的,加上next路由才会跳转
全局解析守卫
3.router.beforeResolve 全局解析守卫 注册一个全局守卫。这和 router.beforeEach 类似,因为它在 每次导航时都会触发,但是确保在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后,解析守卫就被正确调用。
router.beforeResolve 是获取数据或执行任何其他操作(如果用户无法进入页面时你希望避免执行的操作)的理想位置。
路由后置守卫
1.router.afterEach
你也可以注册全局后置钩子,然而和守卫不同的是,这些钩子不会接受 next 函数也不会改变导航本身:
组件内的守卫(路由组件内直接定义路由导航守卫(传递给路由配置的))
beforeRouteEnterbeforeRouteEnter守卫 不能 访问this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。
在渲染该组件的对应路由被验证前调用
不能获取组件实例 `this` !
因为当守卫执行时,组件实例还没被创建!
不过,你可以通过传一个回调给 next 来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数:
beforeRouteEnter (to, from, next) {
next(vm => {
// 通过 `vm` 访问组件实例
})
}
注意 beforeRouteEnter 是支持给 next 传递回调的唯一守卫。对于 beforeRouteUpdate 和 beforeRouteLeave 来说,this 已经可用了,所以不支持 传递回调,因为没有必要了
2.beforeRouteUpdate
在当前路由改变,但是该组件被复用时调用
举例来说,对于一个带有动态参数的路径 `/users/:id`,在 `/users/1` 和 `/users/2` 之间跳转的时候,
由于会渲染同样的 `UserDetails` 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
因为在这种情况发生的时候,组件已经挂载好了,导航守卫可以访问组件实例 `this`
3.beforeRouteLeave
这个 离开守卫 通常用来预防用户在还未保存修改前突然离开。该导航可以通过返回 false 来取消。
// 在导航离开渲染该组件的对应路由时调用
// 与 `beforeRouteUpdate` 一样,它可以访问组件实例 `this`