路由守卫分为全局守卫、组件独享守卫、组件内守卫
1. 全局守卫:router.beforeEach((to, from, next) => {})
,主要用来在路由跳转之前判断该路径是否需要登录权限,需要的话就跳转到登录页面
在router用`meta:{requireAuth: true/false}`来配置是否需要登录
router.beforeEach((to, from, next) => {
console.log(to,from )
if(to.matched.some(record => record.meta.requireAuth)) {//判断该路由是否需要登录权限
if(getToken()){//判断token是否存在(登录时存的token)
if(to.path == '/login'){
removeToken();
window.location.reload();
}else{
next()
}
}else{
next({
path: '/login',
query: {
redirect: to.fullPath,//将跳转的路由作为path参数,登录后跳转到该路由
}
})
}
}else{
next();
}
})
2. 组件内的守卫
当某个组件有特殊情况时,可以在这两个守卫内处理
- 到达组件时:beforeRouterEnter:(to, from, next)=>{}
- 离开组件时:beforeRouterLeave:(to, from, next)=>{}
- 切换子路由时:beforeRouterUpdate
3. 路由独享的守卫
beforeEnter: (to, from, next)=>{}用法和全局守卫一样,区别是这个写在路由对象里,让他只在这个路由下起作用