位置: 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优化小目标识别

  • 哔哩哔哩可以两个人一起看电影吗(哔哩哔哩可以两个手机登录同一个账号吗)

    哔哩哔哩可以两个人一起看电影吗(哔哩哔哩可以两个手机登录同一个账号吗)

  • 华为荣耀v20充电发烫(华为荣耀v20充电器型号)

    华为荣耀v20充电发烫(华为荣耀v20充电器型号)

  • amda00interface是什么驱动

    amda00interface是什么驱动

  • 为什么美团众包实名认证不通过(为什么美团众包解绑不了银行卡)

    为什么美团众包实名认证不通过(为什么美团众包解绑不了银行卡)

  • 苹果11数据线怎么看真假(苹果11数据线怎么连接电脑上网)

    苹果11数据线怎么看真假(苹果11数据线怎么连接电脑上网)

  • 抖音怎么看关注的人的直播(抖音怎么看关注的人列表)

    抖音怎么看关注的人的直播(抖音怎么看关注的人列表)

  • 钉钉怎么弄到电脑上(钉钉怎么弄到电视上去)

    钉钉怎么弄到电脑上(钉钉怎么弄到电视上去)

  • se2无线充电吗(se2无线充电功能)

    se2无线充电吗(se2无线充电功能)

  • 苹果11promax前置摄像头模糊(苹果11promax前置摄像头像素多少)

    苹果11promax前置摄像头模糊(苹果11promax前置摄像头像素多少)

  • 显卡后面的字母是什么意思(显卡后面的字母h是什么意思)

    显卡后面的字母是什么意思(显卡后面的字母h是什么意思)

  • 笔记本电脑要网线吗(笔记本电脑要网线接口吗)

    笔记本电脑要网线吗(笔记本电脑要网线接口吗)

  • 骁龙665和麒麟710F对比(麒麟710和骁龙660)

    骁龙665和麒麟710F对比(麒麟710和骁龙660)

  • 微信如何查询付款人(微信如何查询付款记录明细)

    微信如何查询付款人(微信如何查询付款记录明细)

  • 华为matebook14屏占比(华为matebook14屏幕尺寸长宽)

    华为matebook14屏占比(华为matebook14屏幕尺寸长宽)

  • 手机里的data能删除吗(手机里data文件)

    手机里的data能删除吗(手机里data文件)

  • 淘宝直播屏蔽设置在哪里(淘宝直播间屏蔽)

    淘宝直播屏蔽设置在哪里(淘宝直播间屏蔽)

  • 荣耀v20在哪看运行内存(荣耀20在哪里看运行内存)

    荣耀v20在哪看运行内存(荣耀20在哪里看运行内存)

  • ai技术是用什么(ai技术是什么现在主要应用领域有哪些)

    ai技术是用什么(ai技术是什么现在主要应用领域有哪些)

  • 监控录像能调出几天的(监控录像里的摄像头可以调吗)

    监控录像能调出几天的(监控录像里的摄像头可以调吗)

  • 退出qq群其他人能看到提示吗(退出qq群其他人怎么显示)

    退出qq群其他人能看到提示吗(退出qq群其他人怎么显示)

  • 如何进入tplink(如何进入tplink路由器管理界面)

    如何进入tplink(如何进入tplink路由器管理界面)

  • 微信动态视频怎么保存(微信动态视频怎么下载)

    微信动态视频怎么保存(微信动态视频怎么下载)

  • 索尼xperia1怎么设置锁屏时间

    索尼xperia1怎么设置锁屏时间

  • 华为watch2pro和gt区别(华为watch2pro和gt2区别)

    华为watch2pro和gt区别(华为watch2pro和gt2区别)

  • oppor15上市时间(oppor15上市时间年月日)

    oppor15上市时间(oppor15上市时间年月日)

  • Vue基础笔记(vue基础知识)

    Vue基础笔记(vue基础知识)

  • 外轮供应公司远洋运输供应公司的退税申报?
  • 纳税标准怎么算
  • 劳务费增值税税率13%
  • 计提房产税要含税吗
  • 企业境外投资管理办法
  • 从厂家拿货怎么谈价格
  • 预计净残值的计算公式为
  • 转正后个税增加
  • 增值税专用发票几个点
  • 劳务公司的员工与正式员工
  • 餐饮无票收入怎么做账
  • 减免税款记账营业外收入什么科目?
  • 进项税发票已经认证但对方又作废
  • 增值税月报时间
  • 多缴的增值税能退吗
  • 兼营免税减税项目
  • 旅游服务费计入什么费用
  • 本年利润结转到利润分配是每月都结转还是年底结转
  • 税率征收率的区别
  • 个人缴付的年金是什么
  • 公司用库存商品怎么做账
  • 固定资产转移是什么意思
  • 筹建期间内发生的开办费属于什么费用
  • win7为什么现在不能用了
  • Win10版本21H2卡死
  • PHP:pg_field_prtlen()的用法_PostgreSQL函数
  • 营改增后土增税收入
  • 会计人员报销差额是多少
  • 本月营业利润
  • 无形资产摊销是按原值吗
  • 纳税调整项目明细表30行怎么填写
  • 索洛维茨在哪
  • 微信小程序封掉了怎么办
  • 进口货物完税价格怎么算
  • 图文详解水的画法
  • 工作服列支什么科目
  • point network
  • 云质信息
  • 增值税专用发票和普通发票的区别
  • 经营租赁出租方的会计处理
  • 借款利息收入发票
  • 土地增值税的相关问题
  • 一般纳税人怎样申请简易计税
  • 电子发票开出后如何查看
  • 进料加工出口退税核销最新流程
  • 视同销售要不要确认收入?
  • 固定资产盘盈为什么计入盈余公积
  • 预收账款和其他应付款
  • 贷款利息收入要交增值税吗
  • 缴纳的增值税怎么做账
  • 预缴增值税可以抵扣销项税吗
  • 委托收款背书和质押背书都属于转让背书
  • 工地上报销项目有哪些
  • 应收账款的财务指标有哪些
  • 发票金额跟实际金额为什么不一样
  • 购买原材料材料尚未验收入库,款项尚未支付
  • 小公司用什么财务软件做账
  • 明细账怎么弄
  • win8.1 升级
  • win10系统下如何打开internet(ISS)信息服务
  • win7系统搜索不到自己家wi-fi
  • windows万能wifi
  • bootstrap滚动监听效果
  • jquery easyui 教程
  • dos命令查看磁盘分区
  • python ints
  • 基于javascript的毕业设计选题
  • shell实现自动ssh
  • javascript基础笔记
  • 超详细的卡拉赞攻略
  • JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
  • 陷阱类过关游戏
  • 广东增值税电子专用发票
  • 北京税务机关代码查询
  • 如何开通税务系统
  • 运城取暖费网上怎么交
  • 小规模纳纳税人
  • 进项税计提和上交会计分录
  • 实名办税人员承诺书范本
  • 北京市门头沟最西边有个塔子叫什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设