Vue路由守卫(导航守卫)

本文详细解读了Vue.js中的路由守卫,包括beforeEach进行全局权限验证,beforeEnter处理路由独享权限,以及beforeRouteEnter和beforeRouteLeave的组件内守卫。通过实例演示了如何利用localStorage进行权限检查和元信息meta配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

路由守卫包括全局守卫(beforeEach())、路由独享守卫(beforeEnter())、组件内守卫(beforeRouteEnter()、beforeRouteLeave())
在这里插入图片描述

1.全局守卫(beforeEach())

1.全局前置路由守卫beforeEach(),初始化的时候调用,每次路由切换前调用。
在定义路由router的时候,通过router.beforeEach()来做一些权限管理,比如一个页面需要登录权限,登录了的才能进入这个页面。
在router.js文件

router.beforeEach((to,from,next)=>{
if(to.path==="/home/news"){//如果要到/home/mews
if(localStorage.getItem('school')==='atguigu'){//条件1 满足 就跳转
next()
}else{
alert(‘学校不对,无权限查看’)
}else{
next()
}
}
})

to表示要到的路由,from表示从哪个路由跳转。next()表示放行(即跳转)
2.全局后置后卫afterEach(),初始化的时候调用,每次切换之后调用。

router.afterEach((to,from)=>{
  document.title='嘻嘻'
})

可以在路由配置的时候设置元信息meta,比如上面的不光是to.path==="/home/news需要权限,很多路由都需要这个权限,解决办法是在路由配置的时候在meta里表明

{
path:'/home/news',
component:News,
meta:{
isAuth:true
}
}

在验证时候

router.beforeEach((to,from,next)=>{
if(to.meta.isAuth){如果要到的路由需要meta.isAuth
if(localStorage.getItem('school')==='atguigu'){//条件1 满足 就跳转
next()
}else{
alert(‘学校不对,无权限查看’)
}else{
next()
}
}
})

2.路由独享守卫

在定义路由的时候,

path:"/home/news",
name:"news",
component:News,
beforeEnter(to,from,next){
if(to.meta.isAuth){
if(localStorage.getItem('school'==='atguigu'){
next()
}else{
alert(‘无权查看’)
}
}
}else{
next()
}

在进入这个路由之前,增加条件,满足条件就跳转。

组件内的守卫

和data、created、mounted、methods处于平等关系
1.进入守卫beforeRouteEnter()
进入守卫,通过路由匹配规则,进入该组件时被调用,在组件的.vue文件

beforeRouteEnter(to,from,next){
if(to.meta.isAuth){
if(localStorage.getItem('school')==='atguigu'){
next()
}else{
alert(‘无权查看’)
}
}else{
next()
}
}

2.离开守卫beforeRouteLeave()
通过路由规则,离开该组件被调用

beforeRouteLeave(to,from,next){
next()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值