vue的路由导航守卫分为:全局守卫,路由独享守卫,组件内守卫
全局守卫:router.beforeEach(全局前置守卫),router.beforeResolve(全局解析守卫),router.afterEach(全局后置钩子) ,参数为to,from,next
to:即将要进入的目标 路由对象
from :当前导航正要离开的路由
next :进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。
next(false): 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮), 那么 URL 地址会重置到 from 路由对应的地址。
next(’/’) 或者 next({ path: ‘/’ }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: ‘home’ 之类的选项以及任何 用在 router-link 的 to prop 或 router.push 中的选项.
next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调
路由独享守卫:beforeEnter() 参数为to,from,next
组件内守卫:beforeRouteEnter ()守卫 不能 访问 this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。注意 beforeRouteEnter 是支持给 next 传递回调的唯一守卫。
beforeRouteUpdate ()
beforeRouteLeave(),
官网的解析流程
beforeEach(全局守卫)-> beforeEnter(路由独享守卫)-> beforeRouteEnter(组件内守卫)-> beforeResolve(全局守卫-解析) -> afterEach (全局守卫-解析完成)
beforeRouteUpdate(组件内守卫 组件没有重新渲染,但是数据需要更新)