路由钩子分为三种情况
- 全局钩子:beforeEach、afterEach、beforeResolve
- 单个路由里面的钩子:beforeEnter
- 组件路由:beforeRouterEnter、beforeRouterUpdate、beforeRouterLeave
全局钩子
- beforeEach: 全局前置守卫,进入路由之前
- beforeResolve: 全局解析守卫(2.5.0之后),在 beforeRouterEnter 调用之后调用
- afterEach 全局后置钩子,进入路由之后
路由的三个参数说明
- to:将要进入的路由对象
- from:将要离开的路由对象
- next:这个参数是个函数,且必须调用,否则不能进入路由,否则页面会展示空白
// entry 入口文件 - main.js
import router from './router'
router.beforeEach((to, from, next) => {
next(); //这玩意儿必须写,不然就锤子了
})
router.beforeResolve((to, from, next) => {
next();
})
router.afterEach((to, from) => {
// 全局后置钩子函数
})
路由独享守卫
为某些路由单独配置守卫
const router = new VueRouter({
routes: [
{
path: '/test',
component: RouterTestComponent,
beforeEnter: (to, from, next) => {
// 参数用法与全局的钩子是i一样的,调用顺序在全局前置守卫后面,所以不会被全局守卫覆盖
}
}
]
})
组件内的路由守卫
- beforeRouterEnter:进入路由
- beforeRouterUpdate:路由复用同一个组件时
- beforeRouteLeave:离开当前路由时
触发钩子的顺序
将路由导航,keep-alive,组件生命周期钩子结合起来的,触发顺序,假设是从A组件离开,第一次进入B组件:
- beforeRouteLeave:路由组件的组件离开路由前钩子,可取消路由离开
- beforeEach:路由全局前置守卫,可用于登录验证,全局路由loading等。
- beforeEnter:路由独享守卫
- beforeRouterEnter:路由组件的组件进入路由前钩子
- beforeResolve:路由全局后置钩子
- afterEach: 路由全局后置钩子
- beforeCreate: 组件生命周期,不能访问 this
- created 组件生命周期,可以访问 this, 不能访问 dom
- beforeMount:组件生命周期
- deactivated: 离开缓存组件 A,或者触发 A 的 beforeDestroy 和 destroyed 组件销毁钩子。
- mounted: 访问、操作 dom
- activated:进入缓存组件,进入 A 的嵌套子组件
- 执行 beforeRouteEnter 回调函数 next;