路由守卫的分类
路由守卫有三种,分别是全局路由守卫。独享路由守卫。组件内的路由守卫,关于路由守卫,我们需要了解其是在上面时候运行的,他们的执行顺序是什么。 了解一下路由的几个参数;
- to:进入的目标路由;
- form:即将要离开的路由对象;
- next:控制路由 在跳转时进行的操作;
全局路由守卫
全局路由守卫有三种,我们先来了解其中最常见的一种
全局前置路由守卫(beforeEach) 它是初始化的时候被调用,每次路由切换之前调用;
- 使用场景:通常被用作登录验证,
全局解析守卫(beforeResolve) 在 beforeEach 和 组件内beforeRouteEnter 之后,afterEach之前调用。
全局后置路由守卫 (afterEach) 除了这个路由没有next参数,其他所有的路由都有三个参数(to,from,next) 初始化的时候被调用,每次路由切换之后调用;
- 使用场景:可以用来修改网页的title 、跳转之后滚动条回到顶部
独享路由守卫
路由独享守卫(beforeEnter)
写在路由规则里面 进入该路由是被调用,可以用来判断当前路由是否需要权限限制
组件内的路由守卫
进入守卫(beforeRouteEnter) 通过路由规则进入该组件前调用 ,写在组件内
修改守卫(beforeRouteUpdate) 当前地址改变并且改组件被复用时触发
- 使用场景:带有动态参数的路径foo/∶id,在 /foo/1 和 /foo/2 之间跳转的时候,由于会渲染同样的foo组件,这个钩子在这种情况下就会被调用
离开守卫(beforeRouteLeave) 通过路由规则离开该组件后调用,写在组件内
路由守卫的执行顺序
- 触发进入其他路由。
- 调用要离开路由的组件守卫beforeRouteLeave
- 调用局前置守卫∶ beforeEach
- 在重用的组件里调用 beforeRouteUpdate
- 调用路由独享守卫 beforeEnter。
- 解析异步路由组件。
- 在将要进入的路由组件中调用 beforeRouteEnter
- 调用全局解析守卫 beforeResolve
- 导航被确认。
- 调用全局后置钩子的 afterEach 钩子。
- 触发DOM更新(mounted)。
- 执行beforeRouteEnter 守卫中传给 next 的回调函数