位置: IT常识 - 正文

走进Vue【四】导航守卫和路由原信息详解(vue导航解析流程)

编辑:rootadmin
走进Vue【四】导航守卫和路由原信息详解 文章目录🌟前言🌟什么是导航守卫?🌟全局前置守卫🌟全局解析守卫🌟全局后置钩子🌟路由独享的守卫🌟组件内的守卫可用的配置 API使用组合 API🌟完整的导航解析流程🌟路由元信息🌟写在最后🌟JSON包里写函数,关注博主不迷路🌟前言

推荐整理分享走进Vue【四】导航守卫和路由原信息详解(vue导航解析流程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue教学视频教程,vue导航解析流程,vue导入功能,vue导航实现,vue实现导入导出,导入vue.js,vue实现导入导出,vue ui导入项目,内容如对您有帮助,希望把文章链接给更多的朋友!

哈喽小伙伴们,上一期给大家总结了一下vue-router的基础知识和用法,也带着大家做了一些小案例;不知道小伙伴们联系的怎么样呢?私下也收到了好多小伙伴的私信和评论,,和大家一起共同学习进步真的很开心。今天博主继续咱们之前的走进Vue,来说一下vue-router当中的导航守卫的一些知识;一起来看下吧。

🌟什么是导航守卫?

“导航”表示路由正在发生改变。

正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的,或者组件级的。 记住参数或查询的改变并不会触发进入/离开的导航守卫。你可以通过观察 $route 对象来应对这些变化,或使用beforeRouteUpdate 的组件内守卫。

vue-router官方文档(Vue3写法)

🌟全局前置守卫

你可以使用 router.beforeEach 注册一个全局前置守卫:

const router = createRouter({ ... })router.beforeEach((to, from) => { // ... // 返回 false 以取消导航 return false})

当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航在所有守卫 resolve 完之前一直处于等待中。

走进Vue【四】导航守卫和路由原信息详解(vue导航解析流程)

每个守卫方法接收三个参数:

to: Route: 即将要进入的目标 路由对象from: Route: 当前导航正要离开的路由next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。next(false): 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到from路由对应的地址。next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: 'home' 之类的选项以及任何用在 router-link 的to prop 或 router.push 中的选项。next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。

确保 next 函数在任何给定的导航守卫中都被严格调用一次。它可以出现多于一次,但是只能在所有的逻辑路径都不重叠的情况下,否则钩子永远都不会被解析或报错。这里有一个在用户未能验证身份时重定向到/login 的示例:

router.beforeEach(async (to, from) => { if ( // 检查用户是否已登录 !isAuthenticated && // ❗️ 避免无限重定向 to.name !== 'Login' ) { // 将用户重定向到登录页面 return { name: 'Login' } } })

如果遇到了意料之外的情况,可能会抛出一个 Error。这会取消导航并且调用 router.onError() 注册过的回调。 如果什么都没有,undefined 或返回 true,则导航是有效的,并调用下一个导航守卫 以上所有都同 async 函数 和 Promise 工作方式一样:

router.beforeEach(async (to, from) => { // canUserAccess() 返回 `true` 或 `false` const canAccess = await canUserAccess(to) if (!canAccess) return '/login'})

可选的第三个参数 next

在之前的 Vue Router 版本中,也是可以使用 第三个参数 next 的。这是一个常见的错误来源,可以通过 RFC 来消除错误。然而,它仍然是被支持的,这意味着你可以向任何导航守卫传递第三个参数。在这种情况下,确保 next 在任何给定的导航守卫中都被严格调用一次。它可以出现多于一次,但是只能在所有的逻辑路径都不重叠的情况下,否则钩子永远都不会被解析或报错。这里有一个在用户未能验证身份时重定向到/login的错误用例:

// BADrouter.beforeEach((to, from, next) => { if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' }) // 如果用户未能验证身份,则 `next` 会被调用两次 next()})

下面是正确的版本:

// GOODrouter.beforeEach((to, from, next) => { if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' }) else next()})🌟全局解析守卫

你可以用 router.beforeResolve 注册一个全局守卫。这和 router.beforeEach 类似,因为它在 每次导航时都会触发,但是确保在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后,解析守卫就被正确调用。这里有一个例子,确保用户可以访问自定义 meta 属性 requiresCamera 的路由:

router.beforeResolve(async to => { if (to.meta.requiresCamera) { try { await askForCameraPermission() } catch (error) { if (error instanceof NotAllowedError) { // ... 处理错误,然后取消导航 return false } else { // 意料之外的错误,取消导航并把错误传给全局处理器 throw error } } }})

router.beforeResolve 是获取数据或执行任何其他操作(如果用户无法进入页面时你希望避免执行的操作)的理想位置。

🌟全局后置钩子

你也可以注册全局后置钩子,然而和守卫不同的是,这些钩子不会接受 next 函数也不会改变导航本身:

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

它们对于分析、更改页面标题、

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

上一篇:五、CNN-LSTM数据驱动模型(cnn数据集)

下一篇:[深度学习] 基于切片辅助超推理库SAHI优化小目标识别

  • 上海已监测到XBB.1.5毒株,新冠感染高端局即将打响

    上海已监测到XBB.1.5毒株,新冠感染高端局即将打响

  • 微信粉丝怎样增加、管理与维护(微信粉丝如何快速增加)

    微信粉丝怎样增加、管理与维护(微信粉丝如何快速增加)

  • 家用智能控制系统怎么做(家用智能控制系统)(家用电器智能控制器)

    家用智能控制系统怎么做(家用智能控制系统)(家用电器智能控制器)

  • 华为mate30手机5g是什么系统(华为mate30手机5G开关)

    华为mate30手机5g是什么系统(华为mate30手机5G开关)

  • 微信红包怎么设置指纹支付(微信红包怎么设置别人看不到金额)

    微信红包怎么设置指纹支付(微信红包怎么设置别人看不到金额)

  • OPPOReno内屏修多少钱(opporeno内屏价格)

    OPPOReno内屏修多少钱(opporeno内屏价格)

  • oppoa59s上市时间(oppoa59s上市日期)

    oppoa59s上市时间(oppoa59s上市日期)

  • 手机闪存和内存的区别(手机闪存和内存哪个重要 知乎)

    手机闪存和内存的区别(手机闪存和内存哪个重要 知乎)

  • 12123用户信息申诉需要多久(12123用户信息申诉功能在哪)

    12123用户信息申诉需要多久(12123用户信息申诉功能在哪)

  • 给空号充话费了怎么办(给空号充话费了怎么办微信)

    给空号充话费了怎么办(给空号充话费了怎么办微信)

  • 苹果手机bs机器什么意思(苹果手机bs机器是什么)

    苹果手机bs机器什么意思(苹果手机bs机器是什么)

  • 怎么去掉修订状态(怎么把修订内容去掉)

    怎么去掉修订状态(怎么把修订内容去掉)

  • 710f和710有什么区别(710f跟710a)

    710f和710有什么区别(710f跟710a)

  • 快手号被限流几天恢复(快手限流后账号会被养回来吗)

    快手号被限流几天恢复(快手限流后账号会被养回来吗)

  • 王卡助手领取腾讯会员该怎么弄(王卡助手领取腾讯会员请求异常)

    王卡助手领取腾讯会员该怎么弄(王卡助手领取腾讯会员请求异常)

  • 摄像头打不开是怎么回事(摄像头打不开是主板问题吗)

    摄像头打不开是怎么回事(摄像头打不开是主板问题吗)

  • 快手怎么没有搜索功能(快手怎么没有搜索界面了)

    快手怎么没有搜索功能(快手怎么没有搜索界面了)

  • vivox27怎么没有面部解锁(vivox27怎么没有更多设置功能)

    vivox27怎么没有面部解锁(vivox27怎么没有更多设置功能)

  • 丝瓜视频缓存在哪个文件夹(丝瓜视频缓存的文件在哪儿)

    丝瓜视频缓存在哪个文件夹(丝瓜视频缓存的文件在哪儿)

  • oppoa5与a9的区别(oppoa55和a9的区别)

    oppoa5与a9的区别(oppoa55和a9的区别)

  • qq限额1000了怎么恢复(qq限额1000了怎么办)

    qq限额1000了怎么恢复(qq限额1000了怎么办)

  • 微信被拉黑申请加好友(微信被拉黑申请好友会是什么样子)

    微信被拉黑申请加好友(微信被拉黑申请好友会是什么样子)

  • 如何将旧版本软件在新系统中运行(如何将旧版本软件卸载)

    如何将旧版本软件在新系统中运行(如何将旧版本软件卸载)

  • 一般纳税人应纳税额减征额怎么算
  • 不含税的金额
  • 企业买车购置税跟个人一样吗
  • 计提应收的增值税返还
  • 普票销项负数发票
  • 房地产企业预缴增值税怎么计算
  • 企业将重组债务转为权益工具
  • 销售使用过的固定资产3%减按2%
  • 2016 营改增 对建筑企业影响
  • 无形资产的累计摊销是什么意思
  • 电子发票和增值税电子普通发票的区别
  • 食堂开支计入什么科目
  • 建安企业预缴企业所得税税率
  • 特殊销售方式的计税依据
  • 税法规定固定资产折旧残值率
  • 会计差旅费属于什么会计科目
  • 股票期权个人所得税税率表
  • 合同违约补偿款需要缴纳增值税吗?
  • 联营商场如何交增值税?
  • 办公室电话费
  • 加装固态后如何分盘
  • 销售差异计算公式
  • 给客户买的礼品怎么报销
  • php字符串赋值
  • 关闭系统的命令位于什么菜单中
  • 2015年4月4日摄于Tear Drop Arch附近的月全食,犹他州纪念碑谷 (© Alan Dyer/Alamy)
  • 怎么租一个月
  • win7系统文件在哪里可以找到
  • php的数据类型主要有哪几种?
  • PHP:pcntl_wifstopped()的用法_PCNTL函数
  • 企业租地建厂流程
  • 野生动物huan
  • 从上魏斯巴赫山地列车的车站向外看,德国图林根 (© golero/iStock/Getty Images Plus)
  • uniapp 打开小程序
  • ros urdf
  • 四川黄龙风景名胜区停车收费标准
  • vue 百度地图 移动端
  • vue结合elementui
  • 工程项目科学技术方法工具过程之间的关系
  • php 输出字符串中字符的所有组合
  • python功能强大而深受欢迎的原因
  • 强化学习——Q-Learning算法原理
  • python tkinter详解
  • 税务局退还的三种税费
  • 织梦网站特有标识
  • 环保税的算法
  • 一次性伤残补助金怎么查询进度
  • 本期数值与去年同期数值之差称为什么
  • 往来会计和应收应付有什么区别
  • 二手车需要交什么
  • 电影剧本稿费多少
  • 收到货款比开票少怎么办
  • 管理费用如何核算
  • 挂靠单位账务处理是?
  • 增值税发票抵扣期限是多久
  • 投标资质使用费
  • 营改增后建筑业怎么开票
  • 过程中必须有哪两种状态
  • 未取得发票的固定资产入账规定
  • 公司注销记账凭证还有用吗
  • wind2003
  • openbabel安装
  • window10 屏幕
  • win7怎么免费升级win11
  • macbook pro右上角按键
  • windows7没有声音怎么调
  • win8.1进不了系统
  • win8.1不能关机
  • win10系统怎么找到桌面
  • ubuntu nfs配置
  • 只有一行的矩阵的逆矩阵
  • Unity3D游戏开发毕业论文
  • 前端jsonp解决跨域
  • jquery使用Cookie和JSON记录用户最近浏览历史
  • javascript:download()
  • genymotion-unable to load virtualbox engine
  • 税务局绩效奖金多少
  • 北京市地方税务局2015第10号文件
  • 纳税申报期过了怎么申报
  • 推进落实类似的词语
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设