在 Vue 中,有以下三种路由导航守卫:
- 全局守卫:
router.beforeEach
:在进入每个路由之前执行。回调函数中有三个参数,to
表示进入到哪个路由,from
表示从哪个路由离开,next
是一个函数,用于决定是否展示要看到的路由页面。router.afterEach
:在离开每个路由之后执行。回调函数中有两个参数,to
表示进入到哪个路由,from
表示从哪个路由离开。
- 组件内的守卫:
beforeRouteEnter
:在进入组件时执行。回调函数中有三个参数,to
和from
参数的含义与全局守卫中的一致,next
回调函数略有不同。如果直接以beforeRouteEnter
进行访问,会发现alert
输出hello undefined
,这是因为在执行完之前,data
数据还未渲染。所以,next
会给一个对应的回调,帮助完成。beforeRouteLeave
:在离开组件时执行。如果确认离开,执行next()
;如果取消,执行next(false)
,留在当前页面。
- 路由独享的守卫:
beforeEnter
:用法与全局守卫一致。
执行顺序如下:
- 全局守卫的
router.beforeEach
。 - 路由独享的守卫的
beforeEnter
。 - 组件内的守卫的
beforeRouteEnter
。 - 全局守卫的
router.afterEach
。 - 组件内的守卫的
beforeRouteLeave
。 - 路由独享的守卫的
beforeEnter
。