位置: IT常识 - 正文

【Vue路由守卫】(vue的路由守卫有哪些钩子函数)

编辑:rootadmin
【Vue路由守卫】 Vue路由守卫Vue路由守卫全局路由守卫全局前置守卫全局后置守卫实例代码:独享守卫组件内守卫总结Vue路由守卫

推荐整理分享【Vue路由守卫】(vue的路由守卫有哪些钩子函数),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue 路由守卫,vue的路由守卫有哪些钩子函数,vue3.0路由守卫,vue的路由守卫有什么应用场景,vue3.0路由守卫,vuerouter路由守卫,vue路由守卫的几种方法,vue的路由守卫有什么应用场景,内容如对您有帮助,希望把文章链接给更多的朋友!

路由守卫,简单理解来说就是,当用户要进行一些操作时,我需要用户的一些信息或数据或行为,我判断过后,才会同意用户进行操作,说到这里,我想大家心里都或多或少有点理解了吧,官方一点的解释就是进行操作的鉴权,当操作与之条件匹配时,操作成功,当操作与之不匹配时,操作终止,作用就是是对路由进行权限控制。

在Vue中,路由守卫分为三种:全局路由守卫、独享路由守卫以及组件内路由守卫

全局路由守卫

全局路由守卫,顾名思义,一旦配置,那么作用范围就是所有的路由,全局路由又分为全局前置守卫和全局后置守卫

全局前置守卫

全局前置守卫,组件初始化时调用,每次路由切换之前调用,路由切换之前指的就是,举个例子说,当前我在A路由组件,我要切换到B路由组件,那么前置路由守卫就是在我点了切换按钮,但B路由组件还没有被呈现在页面上的时候被调用。

//全局前置守卫router.beforeEach((to,from,next) =>{ //第一个参数to,包含的内容是切换后的路由对象,也就是跳转后的路由对象 //第二个参数from,包含的内容的是切换前的路由对象,也就是跳转前的路由对象 //第三个参数next(),是否往下执行,执行的话,如果不写的话路由就不会跳转,操作将会终止})全局后置守卫

全局后置守卫,组件初始化时调用,每次路由切换之后调用,路由切换之后指的就是,举个例子说,当前我在A路由组件,我要切换到B路由组件,那么前置路由守卫就是在我点了切换按钮B路由组件呈现到页面中后被调用。

router.afterEach((to,from) =>{ //第一个参数to,包含的内容是切换后的路由对象,也就是跳转后的路由对象 //第二个参数from,包含的内容的是切换前的路由对象,也就是跳转前的路由对象实例代码:

下面我写的实例是当时看网课尚硅谷老师教的,结合浏览器的Local Storage做出鉴权操作: 主要的就是src/store/index.js文件中的配置 src/store/index.js:

//该文件用于创建整个应用的router//首先,需要引用vue-routerimport VueRouter from "vue-router";//引入路由组件import TestA from '../pages/TestA'import TestB from '../pages/TestB'// 引入二级路由组件import TestBHzw from '../pages/TestBHzw'import TestBHyrz from '../pages/TestBHyrz'import DataList from '../pages/DataList'//创建并暴露一个VueRouterconst router = new VueRouter({ routes:[ //配置路由路径和路由组件 { //这里的路径可自由定义,但是为了初学者好理解,我就采用和组件同样的命名,防止在写路径的时候搞混 name:'导航一', path:'/TestA', component:TestA, //要跳转到的组件 children:[ { // 给二级路由起名字 name:'DataName', path:'DataList/:introduce', //起到占位作用 component:DataList } ] }, { name:'导航二', path:'/TestB', component:TestB, meta:{isAuth:true,}, // 配置二级路由 children:[ { path:'TestBHzw', //重点注意,不要加 / component:TestBHzw }, { path:'TestBHyrz', component:TestBHyrz } ] } ]})//全局前置路由,配合浏览器localStorage进行鉴权操作router.beforeEach((to, from, next) =>{ //首先,我们先看一看to和from参数,next就是执行的意思,不写页面是不会跳转的 // console.log(to, from); if(to.meta.isAuth){ //判断是否需要鉴权 if(localStorage.getItem('name') === '张三'){ next(); }else{ alert('不好意思,姓名不对,没有权限'); } }else{ next() }})// 全局后置路由,简单写一个弹窗,在进入每一个路由组件后弹出一句话router.afterEach(() =>{ alert('欢迎你!!');})export default router;

TestA.vue:

<template> <div> <h4>著名动漫简介</h4> <ul> <li v-for="i in DataList" :key="i.id"> <!-- 使用params参数传递动态参数 注意:params传递参数必须配合name属性--> <router-link :to="{ name:'DataName', params:{ introduce:i.introduce } }">{{i.name}}</router-link> </li> </ul> <router-view></router-view> </div></template><script>export default { name:'TestA', data(){ return{ DataList:[ { id:1, name:'《海贼王》', introduce:'《航海王》是日本漫画家尾田荣一郎作画的少年漫画作品,于1997年7月22日在集英社《周刊少年Jump》开始连载。改编的电视动画《航海王》于1999年10月20日起在富士电视台首播。' }, { id:2, name:'《火影忍者》', introduce:'电视动画《火影忍者》改编自日本漫画家岸本齐史的同名漫画,2002年10月3日在东京电视台系列全6局、岐阜放送首播,共220话;第二季《火影忍者疾风传》于2007年2月15日-2017年3月23日在东京电视台播出,共500话;累计全720话。' }, { id:3, name:'《斗破苍穹》', introduce:'《斗破苍穹》是一部由阅文集团旗下起点中文网作家天蚕土豆同名玄幻长篇经典小说改编的动画。该动画第一季已于2017年1月7日在腾讯视频上映,bilibili同步跟播,共十二集。' }, { id:4, name:'《鬼灭之刃》', introduce:'《鬼灭之刃》是日本漫画家吾峠呼世晴所著的少年漫画,自2016年2月15日—2020年5月11日在集英社《周刊少年Jump》上连载。已完结。' } ] } }}</script><style scoped>h4{ text-align: center;}a{ text-decoration: none;}.active:visited{ color: brown;}</style>【Vue路由守卫】(vue的路由守卫有哪些钩子函数)

TestB.vue:

<template> <div> <h4>我是内容二</h4> <!-- 多级路由 --> <div class="box"> <!-- 此处路径一定要写完整路径 --> <router-link to="/TestB/TestBHzw" active-class="active">点击查看《海贼王的简介》</router-link>&nbsp;&nbsp;&nbsp; <router-link to="/TestB/TestBHyrz" active-class="active">点击查看《火影忍者的简介》</router-link> <hr> <router-view></router-view> </div> </div></template><script>export default { name:'TestB',}</script><style scoped>h4{ text-align: center;}.box{ text-align: center;}a{ text-decoration: none;}.active:visited{ color: brown;}</style>

DataList.vue:

<template> <div> <ul> <!-- 采用插值语法就可以拿到父级路由中的数据 --> <li>{{$route.params.introduce}}</li> </ul> </div></template><script>export default { name:'DataList'}</script><style></style>

TestBHzw.vue和TestBHyrz.vue的结构是一样的,就不重复展示了:

<template> <div> <p> 电视动画《火影忍者》改编自日本漫画家岸本齐史的同名漫画, 2002年10月3日在东京电视台系列全6局、岐阜放送首播,共220话; 第二季《火影忍者疾风传》于2007年2月15日-2017年3月23日在东京电视台播出,共500话;累计全720话。 </p> </div></template><script>export default { name:'TestBHyrz'}</script><style></style>

当然,想要配置路由守卫,前提就是把基本的路由配置好

因为不管是前置守卫和后置守卫,都有三个参数,netx()我们已经说过,不写的话不会往下一步走, 那么我们输出一下to和from看看 当前页面是初始化页面,所以此时输出的to, from都是空对象。 当我们点击 “导航一” 时,to里面有了新内容,为什么from没有呢,是因为我们处于最顶层初始化页面,在我们点击之前,我们是没有路由的,所以只能捕获到我们要去往哪一个路由组件,匹配不到我们来自哪一个路由组件 当我们处于第一级路由的 “导航一” 跳往 “导航二” 时,此时的to和from就显而易见了 要想配合localStorage来实现鉴权,我们就要先在浏览器中给他一对key—value 现在我们就可以把鉴权的操作写在前置守卫中了 后置守卫就简单实现一下进入组件后实现弹窗

此时我们切换到“导航二”组件时,前置路由守卫已经拒绝了我们的访问,那是因为我在鉴权操作中,匹配的名字是“张三” 把名字改为“王五”后,我们可以正常访问“导航二”组件了

独享守卫

组件独享守卫是在进入组件时被调用,区别就在于,想对那个路由进行权限控制就直接在其路由配置项中添加守卫,作用域也仅限于该路由

beforeEnter(to,from,next){ //第一个参数to,包含的内容是切换后的路由对象,也就是跳转后的路由对象 //第二个参数from,包含的内容的是切换前的路由对象,也就是跳转前的路由对象 //第三个参数next(),是否往下执行,执行的话,如果不写的话路由就不会跳转,操作将会终止}

可自行去尝试,其实效果都是一样的,只不过,全局路由守卫服务的是所有路由组件,而独享路由守卫只服务于被配置的单个路由组件

组件内守卫

当使用路由规则进入该组件或离开该组件时,就会触发组件内守卫的调用,而组件内守卫的作用于范围也仅限于该组件

//进入守卫:通过路由规则,进入该组件时被调用beforeRouteEnter (to, from, next) { //第一个参数to,包含的内容是切换后的路由对象,也就是跳转后的路由对象 //第二个参数from,包含的内容的是切换前的路由对象,也就是跳转前的路由对象 //第三个参数next(),是否往下执行,执行的话,如果不写的话路由就不会跳转,操作将会终止},//离开守卫:通过路由规则,离开该组件时被调用beforeRouteLeave (to, from, next) { //第一个参数to,包含的内容是切换后的路由对象,也就是跳转后的路由对象 //第二个参数from,包含的内容的是切换前的路由对象,也就是跳转前的路由对象 //第三个参数next(),是否往下执行,执行的话,如果不写的话路由就不会跳转,操作将会终止}

唯一不同于之前的就是 BeforeRouterLeave(),它并不像全局后置守卫一样在路由组件加载完成之后调用,而是在你切换出这个组件后被调用,也就是离开这个组件后被调用,在开发中,我们也可以使用BeforeRouterLeave() 来完成某些操作,比如当我要切换出该组件事,我希望该组件的操作能暂停,而不是一直运行,只有当我切换回该组件时,又再次运行,这样的操作就可以配合着beforeRouteEnter() 来完成,也可以提高应用的性能

总结

路由守卫在实际开发过程中是一个较为重要的知识点,其作用和功能在实际开发中也大大方便了我们的开发,在对用户鉴权操作时也提高了我们编写代码的小效率,以上就是我个人在学习时对路由守卫的理解和笔记。 纸上得来终觉浅,绝知此事要躬行!!

创作不易,记得点赞收藏加关注哟

本文链接地址:https://www.jiuchutong.com/zhishi/297541.html 转载请保留说明!

上一篇:程序员的下一个风口(程序员后续发展)

下一篇:KNX协议介绍(kk协议)

  • 苹果手机微信怎么分身的(苹果手机微信怎么分身)(苹果手机微信怎么置顶)

    苹果手机微信怎么分身的(苹果手机微信怎么分身)(苹果手机微信怎么置顶)

  • 电脑任务栏被锁死怎么解除(电脑任务栏被锁定怎么解除快捷键)

    电脑任务栏被锁死怎么解除(电脑任务栏被锁定怎么解除快捷键)

  • 菜鸟驿站放几天会退回(菜鸟驿站放几天收费)

    菜鸟驿站放几天会退回(菜鸟驿站放几天收费)

  • OPPO reno4像素是多少万(reno4像素是多少)

    OPPO reno4像素是多少万(reno4像素是多少)

  • 淘宝的支付方式有几种(怎么查看淘宝的支付方式)

    淘宝的支付方式有几种(怎么查看淘宝的支付方式)

  • su崩溃了文件保存在哪(su文件损坏怎么修复)

    su崩溃了文件保存在哪(su文件损坏怎么修复)

  • 云南有5g网络吗(云南哪些城市有5g网络)

    云南有5g网络吗(云南哪些城市有5g网络)

  • spn一al00是什么型号手机(spn al00是什么型号手机)

    spn一al00是什么型号手机(spn al00是什么型号手机)

  • 三星s8有红外线功能吗(三星s8红外线功能怎么开)

    三星s8有红外线功能吗(三星s8红外线功能怎么开)

  • 拼多多退到支付宝的钱怎么看(拼多多退款到多多支付)

    拼多多退到支付宝的钱怎么看(拼多多退款到多多支付)

  • 淘宝上已处理的评价什么时候刷新(淘宝已处理的评价是怎么回事)

    淘宝上已处理的评价什么时候刷新(淘宝已处理的评价是怎么回事)

  • 微信添加过期了怎么再次同意(微信添加过期了还会有提醒吗)

    微信添加过期了怎么再次同意(微信添加过期了还会有提醒吗)

  • 手机怎么设置后台运行(手机怎么设置后天的闹钟)

    手机怎么设置后台运行(手机怎么设置后天的闹钟)

  • vivo手机记步怎么打开(vivo手机记步怎么显示在桌面上)

    vivo手机记步怎么打开(vivo手机记步怎么显示在桌面上)

  • qq怎么发送整个文件夹(qq怎么发送整个文件夹不解压)

    qq怎么发送整个文件夹(qq怎么发送整个文件夹不解压)

  • 印度没有总统吗(印度为啥没有总统)

    印度没有总统吗(印度为啥没有总统)

  • 三星s5怎么开4g(三星s5如何设置4g网络设置)

    三星s5怎么开4g(三星s5如何设置4g网络设置)

  • 苹果手机录像有暂停功能吗(苹果手机录像有哒哒哒的声音)

    苹果手机录像有暂停功能吗(苹果手机录像有哒哒哒的声音)

  • airpods2怎么调节音量(airpods2怎么调节音量等操作)

    airpods2怎么调节音量(airpods2怎么调节音量等操作)

  • word文档如何取消分页显示(word文档如何取消分页符号)

    word文档如何取消分页显示(word文档如何取消分页符号)

  • a9和a9x有什么区别(oppoa9x和a9有什么区别)

    a9和a9x有什么区别(oppoa9x和a9有什么区别)

  • 小红书地址在哪里修改(小红书地址在哪改)

    小红书地址在哪里修改(小红书地址在哪改)

  • 旺旺名是什么在哪里看(旺旺名叫什么大气一点)

    旺旺名是什么在哪里看(旺旺名叫什么大气一点)

  • Win10下载软件被阻止怎么办?win10下载软件被阻止的处理办法(win10下载软件被阻止安装怎么办)

    Win10下载软件被阻止怎么办?win10下载软件被阻止的处理办法(win10下载软件被阻止安装怎么办)

  • 系统中总是多了一个软驱盘在BIOS中如何关闭软驱(系统太多怎么办)

    系统中总是多了一个软驱盘在BIOS中如何关闭软驱(系统太多怎么办)

  • Vue3二维码生成(简洁明了)(vue qrcode生成二维码)

    Vue3二维码生成(简洁明了)(vue qrcode生成二维码)

  • 冰川洞穴里流动的河流,冰岛瓦特纳冰原 (© Marco Bottigelli/Getty Images)(冰川洞洞打法)

    冰川洞穴里流动的河流,冰岛瓦特纳冰原 (© Marco Bottigelli/Getty Images)(冰川洞洞打法)

  • mkbootmedia命令  创建可引导的Solaris ISO映像(mkdir 命令)

    mkbootmedia命令 创建可引导的Solaris ISO映像(mkdir 命令)

  • ps怎么选中图形(ps怎么选中图形放大)

    ps怎么选中图形(ps怎么选中图形放大)

  • 律师事务所个人所得税如何计算
  • 房产契税什么时候交的小知识
  • 银行应发贷款和实际收到的贷款为什么不一致
  • 资金结存科目余额对应
  • 先开发票后发货
  • 合并报表无形资产摊销时间
  • 坏账转销会计分录应收帐款金额怎么写
  • 二手设备进口海关
  • 建筑工程项目的全生命周期包括
  • 利润表中企业所得税
  • 实收资本印花税属于什么税目
  • 小规模代开增值税专票开错了如何处理?
  • 出口企业增值税怎么算
  • 在产品,产成品和库存商品的区别
  • 计提增值税会计账务处理
  • 怎么在电子税务局变更财务负责人
  • 城建税和教育费附加可以税前扣除吗
  • 发票进项抵扣有什么用
  • 企业个税网上申报时间
  • 出口的货物因质量问题被扣款
  • 兼营行为的含义
  • 固定资产可以一次折旧完吗
  • win10要更新系统
  • 入账价值是啥
  • php imagecreatetruecolor 创建高清和透明图片代码小结
  • 公司缴纳的契税怎么查询
  • 持有至到期投资减值准备
  • 未签订租赁合同租金如何确定
  • vue trim
  • 税收筹划的风险性
  • 税务登记投资总额和注册资本一样吗
  • opencv1.0
  • 文化事业建设费的征收范围
  • 公司购买led屏幕做到什么费用
  • 借贷公司借钱给别的公司需要开什么会
  • php 上传
  • 小规模季度免税政策
  • 财政监制章专用收据可以税前扣除吗
  • 合同不交印花税怎么处理
  • 印花税的特点是
  • sql2000日志清理
  • 一般纳税人承租个人房屋怎么抵扣
  • 销售公司的主营业务成本怎么算
  • 销售退回所得税怎么做账
  • 外地预缴怎么算
  • 如何核算购进商品
  • 开发成本期末如何结转
  • 税控系统专用设备包括税控收款机吗
  • 调试机器要注意事项
  • 价税合计怎么求税额
  • 制造费用转入什么
  • 交通补贴属于工资薪金所得吗
  • 给对方承兑对方不承认怎么办
  • 破产重组还需要还钱吗
  • c 语言 mysql
  • sqlserver 创建索引与使用
  • windows server 2003如何安装
  • mssqlserver安装
  • ubuntu系统中如何安装WiFi驱动
  • linux进程的概念
  • centos安装ntfs 3g
  • bois开启usb功能
  • 电脑win 8系统
  • win10系统出现问题怎么办
  • win8如何开启蓝牙
  • 苹果Mac系统怎么安装
  • mssecsvc是什么进程
  • win10通过任务管理器打开设置
  • windows自带视频
  • renderjs echarts
  • perl -pi
  • 浅析我国国防现状
  • vim命令详解
  • unity fixed update
  • js prev()
  • 前端实现图片编辑
  • wordpress基于什么语言
  • 宁夏地税局局长
  • 重庆经开区属于哪个大区
  • 金税工程什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设