vue-router有三个:
全局守卫
beforeEach 前置守卫
beforeResolve 解析守卫
afterEach 后置守卫
// afterEnter参数只有两个
router.afterEnter(to,from=>{
})
路由守卫
beforeRouteEnter 进入组件之前触发,在Created前面
bforeRouterUpdated 路由更新,但内容不改变
beforeRouterLeave 离开之前触发,在beforeDestory之前触发
组件守卫
beforeEnter 读取路由信息
路由配置
const routes = [
{
path:"/",
name:"首页",
component: ()=> import('../index.vue'),
beforeEnter: (to,from,next) => {
// to:即将要进入的路由对象
// from: 导航要离开的路由
next(); //必须调用的函数,不写默认是通不过的,此时也不能进入页面。
// next:调用该方法来resolve这个钩子,执行效果依赖next方法的调用参数。
// next(); 进行管道中的下一个钩子
// next(false); 中断当前导航
// next('/')或者next({path:'/'}); 跳转不同的地址,当前导航被中断,然后进行下一个新的导航。
// next(error); 如果传入的参数是一个error实例,导航会被终止并且该错误会被传递给router.onerror()注册过的回调
}
}
]
路由前置守卫
{
path: '/',
name: 'Home',
component: () => import('../views/Home.vue'),
meta: { isAuth: true, title:'主页' },
},
//全局前置路由守卫————初始化的时候被调用、每次路由切换之前被调用
router.beforeEach((to, from, next) => {
//如果路由需要跳转
if (to.meta.isAuth) {
//判断 如果school本地存储是qinghuadaxue的时候,可以进去
if (localStorage.getItem('school') === 'qinghuadaxue') {
next() //放行
} else {
alert('抱歉,您无权限查看!')
}
} else {
// 否则,放行
next()
}
})
路由后置守卫
{
path: '/',
name: 'Home',
component: () => import('../views/Home.vue'),
meta: { isAuth: true, title:'主页' },
},
//全局后置路由守卫————初始化的时候被调用、每次路由切换之后被调用
router.afterEach((to, from) => {
document.title = to.meta.title || '默认名' //修改网页的title
})
独享路由守卫
{
path: '/',
name: 'Home',
component: () => import('../views/Home.vue'),
meta: { isAuth: true },
beforeEnter: (to, from, next) => {
if (to.meta.isAuth) { //判断是否需要授权
if (localStorage.getItem('school') === 'qinghuadaxue') {
next() //放行
} else {
alert('抱歉,您无权限查看!')
}
} else {
next() //放行
}
}
},
组件内守卫
//通过路由规则,进入该组件时被调用
beforeRouteEnter(to,from,next) {
if(toString.meta.isAuth){
if(localStorage.getTime('school')==='qinghuadaxue'){
next()
}else{
alert('学校名不对,无权限查看!')
}
} else{
next()
}
},
//通过路由规则,离开该组件时被调用
beforeRouteLeave(to,from,next) {
next()
}
进入一个页面路由所执行的钩子
beforeEach---->beforeEnter---->beforeRouterEnter---->beforeResolve---->affterEach
进入前置守卫---->读取路由信息---->进入组件---->进行解析---->进入后置守卫。