路由守卫(简易版)

路由守卫是Vue.js中用于在路由变化时执行逻辑的功能,分为全局守卫、独享守卫和组件内守卫。全局守卫如beforeEach和afterEach用于统一处理权限,独享守卫针对特定路由设置权限,组件内守卫则在组件级别控制路由行为。常用于权限验证,例如检查用户是否具有访问特定页面的权限。

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

目录

(一)什么是路由守卫

(二)路由守卫的分类

(1)全局守卫

(2)独享守卫

(3)组件内守卫


(一)什么是路由守卫

路由守卫:路由在跳转前、后过程中的一些钩子函数,这些函数可以让你操作一些其他的事,在后台管理中设置权限时经常看到,在实现路由跳转前校验是否有权限,有权限就可以通过,反之就会被执行其他操作。

(二)路由守卫的分类

(1)全局守卫

beforeEach和afterEach,其中有to,from,next参数

对于beforeEach传三个参数,afterEach传to,from两个参数即可

to:为即将进入的目标对象,可以用to.path或者to.name调用路由对象中的属性

from:也为从哪里来,当前正要离开的路由

next:其为一个方法,表示放行有权限。

路由守卫写在router下的index.js中 ,为了书写便利,将自己需要的数据写在meta里面

{

                   name:'xinwen',

                   path:'news',

                    component:News,

                    meta:{isAuth:true,title:'新闻'}//想让谁有权限就写在谁的路由配置里面

  },

1、前置全局路由守卫

router.beforeEach((to, from, next) => {

    if(to.meta.isAuth){

        if(localStorage.getItem('school')==='hkd2'){

            next()

        }

        else{

            alert('学校名不对,无权限查看')

        }

    }else{

        next()

    }

})

2、后置路由守卫

路由跳转之后执行,可以用作跳转路由后更改网页名

// (全局后置路由守卫)切换后

router.afterEach((to,from)=>{

    document.title=to.meta.title||"小开心系统"

})

(2)独享守卫

注意 :独享路由守卫只有前置没有后置,用于向单独的给某个路由设置权限,在配置路由的时候配置。

{

                    name:'xinwen',

                    path:'news',

                    component:News,

                    meta:{isAuth:true,title:'新闻'},

                    beforeEnter(to,from,next){

                        if(to.meta.isAuth){

                            if(localStorage.getItem('school')==='hkd'){

                                next()

                            }

                            else{

                                alert('学校名不对,无权限查看')

                            }

                        }else{

                            next()

                        }

                    }

                },

(3)组件内守卫

写在组件(.vue)里面

beforeRouteEnter:通过路由规则,进入该组件时被调用

beforeRouteLeave:通过路由规则,进入该组件时被调用

export default {

        name:'About',

        beforeRouteEnter(to,from,next){

            console.log('about---beforeRouteEnter',to,from)

            if(to.meta.isAuth){

                    if(localStorage.getItem('school')==='hkd'){

                        next()

                    }

                    else{

                        alert('学校名不对,无权限查看')

                    }

                }else{

                    next()

                }

        },

        beforeRouteLeave(to,from,next){

            console.log('about---beforeRouteLeave',to,from)

            next()

        }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值