Web前端 ---- 【Vue】vue路由守卫(全局前置路由守卫、全局后置路由守卫、局部路由path守卫、局部路由component守卫)

目录

前言

全局前置路由守卫

全局后置路由守卫

局部路由守卫之path守卫

局部路由守卫之component守卫


前言

本文介绍Vue2最后的知识点,关于vue的路由守卫。也就是鉴权,不是所有的组件任何人都可以访问到的,需要权限,而根据权限显示路由组件就需要路由守卫。

(本文建立在上篇文章代码基础之上)

全局前置路由守卫

全局前置路由守卫写在创建好router和暴露router之间

router.beforeEach(callback)

callback函数可以是普通函数也可以是箭头函数

callback函数有三个参数

from**:路由对象,表示从哪来,起点**

to**:路由对象,表示到哪去,终点**

next**:这是一个函数,调用后表示放行,可以继续往下走**

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

该callback函数会在初始化时被调用执行一次,以后每一次在任意切换路由组件之前都会被调用

简单举例

javascript 复制代码
router.beforeEach((to,from,next)=>{
    let user = 'zzz'
    if(to.meta.isAuth) {
        if(user=='admin') {
            next()
        }
        else {
            alert('你没有权限')
        }
    }
    else {
        next()
    }
})

因为需要给路由对象频繁的进行判断是否需要鉴权

所以可以通过给路由对象添加自定义属性,可以解决代码的冗余

给路由对象添加自定义属性需要在路由对象的meta中定义

通过以上代码可以简单的达到鉴权的功能,判断用户名从而决定是否放行显示路由组件

全局后置路由守卫

全局后置路由守卫与全局前置路由守卫相同,都写在创建路由器和暴露路由器之间

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

两个参数,to和from,和全局前置守卫相同

区别点在与

全局前置路由守卫在初始化时会调用一次callback以及在切换路由组件之前会调用一次callback函数

全局后置路由守卫则是在初始化时会调用一次callback和在切换路由组件之后调用一次

javascript 复制代码
// 全局后置守卫
router.afterEach((to,from)=>{
    console.log(to);
    console.log(from);
})

局部路由守卫之path守卫

局部路由守卫,针对单个组件进行鉴权

代码写在route路由对象中

beforeEnter(){}

没有callback函数

本身可以理解为函数

三个参数

to,from,next

javascript 复制代码
 beforeEnter(to,from,next){
                        let user = 'admin'
                        if(user=='admin') {
                            next()
                        }
                        else {
                            alert('你没有权限')
                        }
                    }

局部路由守卫之component守卫

component守卫是针对路由组件的,只会对路由组件生效

代码写在路由组件中

进入路由组件之前执行:

beforeRouteEnter(to,from,next){}

离开路由组件之前执行:

beforeRouteLeave(to,from,next){}

javascript 复制代码
 beforeRouteEnter(to,from,next){
      console.log(to);
      next()
    },
    beforeRouteLeave(to,from,next){
      console.log(from);
      next()
    }

在一条时间线上执行

beforeRouteEnter中的to和beforeRouteLeave中的from是指向一个对象

相关推荐
杨进军9 分钟前
React 创建根节点 createRoot
前端·react.js·前端框架
ModyQyW24 分钟前
用 AI 驱动 wot-design-uni 开发小程序
前端·uni-app
说码解字30 分钟前
Kotlin lazy 委托的底层实现原理
前端
gnip1 小时前
总结一期正则表达式
javascript·正则表达式
Q_970956391 小时前
java+vue+SpringBoo校园失物招领网站(程序+数据库+报告+部署教程+答辩指导)
java·数据库·vue.js
爱分享的程序员1 小时前
前端面试专栏-算法篇:18. 查找算法(二分查找、哈希查找)
前端·javascript·node.js
翻滚吧键盘1 小时前
vue 条件渲染(v-if v-else-if v-else v-show)
前端·javascript·vue.js
vim怎么退出1 小时前
万字长文带你了解微前端架构
前端·微服务·前端框架
你这个年龄怎么睡得着的1 小时前
为什么 JavaScript 中 'str' 不是对象,却能调用方法?
前端·javascript·面试
Java水解1 小时前
前端常用单位em/px/rem/vh/vm到底有什么区别?
前端