首先解释下什么是路由守卫?路由守卫是Vue Router提供的一种机制,用于在导航过程中对路由进行操作和管理,通过路由守卫你可以在路由跳转前、路由跳转后、或者跳转失败的过程中去处理相应的逻辑。vue中的路由守卫有三种:全局守卫、私有守卫、组件内守卫,今天大概说下这三种路由守卫。
1.全局守卫
- 全局前置守卫
全局前置守卫会在路由跳转前被调用,可以使用router.beforeEach注册。
const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
// ...
})
to: 即将进入的目标路由对象
from: 当前导航正要离开的路由
next: 用于控制导航行为的回调函数
在守卫的回调函数中,你可以根据业务需求执行相应的操作,如验证用户权限、检查登录状态、取消导航或重定向到其他路由。next函数用于控制导航的继续或中断。
若要中断当前导航并取消跳转,可以调用next(false)
若要重定向到其他路由,并且希望中断当前导航,可以调用next('other-route')
若无需中断导航,则调用next()
前置守卫的使用场景:
1.登录验证
2.权限控制
3.路由拦截
4.数据预处理
.........
- 全局后置守卫
全局后置守卫会在路由跳转后被调用,可以使用router.afterEach注册。
router.afterEach((to, from) => {
// ...
})
to: 即将进入的目标路由对象
from: 当前导航正要离开的路由
2.私有守卫
私有守卫是在路由配置里配置的,只针对当前路由或者子路由生效。可以使用beforeEnter()注册。
const router = new VueRouter({
routes: [
{
path: '/path',
component: MyComponent,
beforeEnter: (to, from, next) => {
// ...
}
}
]
})
使用场景:
1.鉴权和权限控制
2.数据加载和处理
3.导航控制
4.数据埋点或日志记录
3.组件内守卫
组件内的守卫:这些守卫是直接写在组件内部的方法,用于对组件内部的路由变化做出反应。常见的组件内守卫有beforeRouteEnter、beforeRouteUpdate和beforeRouteLeave。
export default {
//...
beforeRouteEnter: (to, from, next) => {
// 在组件实例创建之前调用
// 可以使用回调函数或返回一个Promise延迟进入
},
beforeRouteLeave: (to, from, next) => {
// 在离开当前路由时调用
// 可以进行确认、保存数据等操作
}
beforeRouteUpdate: (to, from, next) => {
// 在当前路由被复用时调用
// 可以对参数的变化作出响应
}
}