Vue-router路由守卫的钩子和使用场景
vue-router中存在三个钩子,也叫hook,生命周期,守卫等。
1、全局守卫
2、路由独享守卫
3、组件独享守卫
全局守卫:页面加载时候触发,一般控制全局权限
const router = new VueRouter();
// 全局前置守卫
router.beforeEach((to, from, next) => {
...
next(); //所有前置守卫最后都需要调用next()进入下一个管道
})
// 全局后置守卫,没有next
router.afterEach((to, from) => {
...
})
// 全局前置解析守卫,和router.beforeEach类似,在所有组件内守卫以及异步路由组件解析完后触发
router.beforeResolve((to, from, next) => {
...
next();
})
路由独享守卫:它是在route文件中使用,参数和全局守卫一样
// beforeEnter和afterEnter
const router = new VueRouter({
routes: [
path: '/',
component: Demo,
beforeEnter: (to, from, next) => {
...
next();
},
afterEnter: (to, from, next) => {
...
next();
}
]
})
组件独享守卫:它是在index.vue文件中使用,参数和全局守卫一样
const Demo = {
template: `...`,
// beforeRouteEnter是拿不到当前组件的this,组件还没被创建,需要通过next(vm => {})回传
beforeRouteEnter (to, from, next) {
...
next();
},
// 当前路由改变并且该组件得到复用是调用,如/demo/:id,在/demo/1切换/demo/2,demo被复用,会触发。
beforeRouteUpdate (to, from, next) {
...
next();
},
beforeRouteLeave (to, from, next) {
...
next();
}
}
使用场景:
1、路由进入前最典型的可以做一些权限控制,路由离开时可以清除或存储一些信息/任务等。
2、前置守卫不能拿到当前组件的this,可以通过next的参数进行回传this。
3、前置守卫必须调用next()方法,否则不会进入下一个管道。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
2021-05-12 Vue element Table 表头提示文案展示