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

  • 微信邀请进群怎么设置需要本人同意(微信邀请进群怎么不显示入群消息)

    微信邀请进群怎么设置需要本人同意(微信邀请进群怎么不显示入群消息)

  • 支付宝零花钱扣的是哪里的钱(支付宝零花钱扣钱怎么回事)

    支付宝零花钱扣的是哪里的钱(支付宝零花钱扣钱怎么回事)

  • 怎么加入拼多多平台卖货(怎么加入拼多多退货服务点呢)

    怎么加入拼多多平台卖货(怎么加入拼多多退货服务点呢)

  • 芒果tv怎么更改绑定的手机号(芒果TV怎么更改下载目录)

    芒果tv怎么更改绑定的手机号(芒果TV怎么更改下载目录)

  • 华为荣耀20青春版对比荣耀9x(华为荣耀20青春版什么时候上市的)

    华为荣耀20青春版对比荣耀9x(华为荣耀20青春版什么时候上市的)

  • 手机的imei码可以告诉别人吗(手机的imei码可以造访机吗)

    手机的imei码可以告诉别人吗(手机的imei码可以造访机吗)

  • iphone相机镜面怎么关(iphone 相机 镜面)

    iphone相机镜面怎么关(iphone 相机 镜面)

  • 安卓个人热点打不开怎么办(安卓个人热点打开)

    安卓个人热点打不开怎么办(安卓个人热点打开)

  • 微信地址中国大陆怎么设置(微信地址中国大陆怎么设置上去呢)

    微信地址中国大陆怎么设置(微信地址中国大陆怎么设置上去呢)

  • 微信可以不绑手机号吗(微信可以不绑手机号绑邮箱吗)

    微信可以不绑手机号吗(微信可以不绑手机号绑邮箱吗)

  • 微信运动没有步数怎么设置(微信运动没有步数怎么回事oppo)

    微信运动没有步数怎么设置(微信运动没有步数怎么回事oppo)

  • 苹果几是双卡双待手机(苹果几是双卡双带的)

    苹果几是双卡双待手机(苹果几是双卡双带的)

  • 苹果xsmax电信卡用不了(苹果xsmax电信卡没信号)

    苹果xsmax电信卡用不了(苹果xsmax电信卡没信号)

  • 华为nova2plus有录屏功能吗(华为nova2plus的录音在哪里)

    华为nova2plus有录屏功能吗(华为nova2plus的录音在哪里)

  • 钉钉一个号可以同时在手机和平板上使用吗(钉钉一个号可以进两个群吗)

    钉钉一个号可以同时在手机和平板上使用吗(钉钉一个号可以进两个群吗)

  • 美图手机t8像素多少(美图t8s手机像素)

    美图手机t8像素多少(美图t8s手机像素)

  • 华为手机删除的app怎么找回来(华为手机删除的信息怎样才能找回来)

    华为手机删除的app怎么找回来(华为手机删除的信息怎样才能找回来)

  • ipv4设置ip地址是多少(ipv4的ip设置)

    ipv4设置ip地址是多少(ipv4的ip设置)

  • 华为手机全民k歌耳机返听怎么设置(华为手机全民k歌为什么唱歌录音声音很小)

    华为手机全民k歌耳机返听怎么设置(华为手机全民k歌为什么唱歌录音声音很小)

  • 淘气值多久涨一次(淘气值几号更新一次)

    淘气值多久涨一次(淘气值几号更新一次)

  • iphone短信特效怎么弄(苹果短信那个特效怎么弄)

    iphone短信特效怎么弄(苹果短信那个特效怎么弄)

  • 三星s9怎么开双微信(三星s9如何双开)

    三星s9怎么开双微信(三星s9如何双开)

  • 如何添加打印机到电脑(如何添加打印机驱动)

    如何添加打印机到电脑(如何添加打印机驱动)

  • 平板怎么看电池损耗(平板怎么看电池损耗程度)

    平板怎么看电池损耗(平板怎么看电池损耗程度)

  • 章鱼输入法苹果能用吗(章鱼输入法苹果手机为什么不能直接发图片)

    章鱼输入法苹果能用吗(章鱼输入法苹果手机为什么不能直接发图片)

  • 视频截图如何变清晰(视频截图如何修成高清)

    视频截图如何变清晰(视频截图如何修成高清)

  • 前端FileReader对象实现图片file文件转base64(前端file对象)

    前端FileReader对象实现图片file文件转base64(前端file对象)

  • 超市发票报销用途写什么
  • 个税系统如何增员
  • 个体工商户定期定额核定
  • 支付临时工劳务费700元需要开发票吗
  • 收到银行转来的进账通知单,上月的销货款
  • 公司分红是按股权比例分配吗
  • 哪些发票可以冲红票
  • 报废资产取得的增值税
  • 旅行社开具发票
  • 资产负债表期末余额怎么算
  • 银行汇票的概念
  • 如何算清楚公司的账
  • 商品税目编码表查询
  • 企业员工奖励款怎么做账
  • 买车交税怎么算价格
  • 航天金税电子发票
  • 其他收益与营业外收入的区别
  • 自行生产的存货转固定资产怎么做账
  • 拆迁安置房如何写两人名字
  • 结转成本的会计分录摘要怎么写
  • windows无法连接到打印机指定的网络名不再可用
  • 外贸企业汇兑损益要交所得税吗
  • 改变资金用途的说明
  • 视频监控维护
  • win11正式版问题
  • 土地增值税安置房收入的确认原则
  • 企业退货产生的损失谁承担
  • 违约金要计入应纳税所得额吗
  • 150m迷你型无线路由器怎么用
  • 酒店的原材料和包装
  • php 正则
  • 专项基金设立
  • 小程序navigator组件
  • Win11系统自带输入法怎么卸载
  • php事件机制
  • thinkphp原理及优缺点
  • 政府补贴收入确认政策
  • 个税计税周期 一年
  • 业务招待费能计入成本吗
  • 完税价格和实际价格
  • 低值易耗品在年报上怎么看的
  • 帝国cms使用手册
  • html前端技术
  • 加计扣除的增值税怎么做账
  • 差旅费科目设置
  • 股权转让溢价部分会计分录
  • 税务局代开的增值税专票可以红冲吗?
  • 会计分录怎么用
  • 如何使用费用分割单
  • 项目资本金如何确定
  • 支票有效期10天是自然日还是工作日
  • 公司的应付票据
  • mysql必知必会和sql基础教程
  • freebsd命令大全
  • win7 word
  • windows7开始菜单不见了
  • auto tool怎么用
  • 电脑windows8怎么样
  • windows 相机打不开
  • jquery操作表格
  • 网页使用的字体中最具可读性.最易浏览的是
  • 如何解决焦虑的心理
  • unity il2cpp热更新
  • java线程池创建
  • nodejs model
  • nodejs vue
  • jquery插件是干什么的
  • android对话框setview用法
  • api/home/getmyregion
  • unityugui
  • js easyui
  • android程序崩溃会被重启
  • 电子发票查询官网入口
  • 云办税大厅
  • 运输费用抵扣税率最新规定
  • 湖北省税务局官网电话
  • 一般纳税人忘记报税一个月罚多少钱
  • 云南税收主要经济来源
  • 江苏省税务局授权网址
  • 地税局的全称是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设