vue保姆级教程----深入了解 Vue3路由守卫

📢 鸿蒙专栏:想学鸿蒙的,冲

📢 C语言专栏:想学C语言的,冲

📢 VUE专栏:想学VUE的,冲这里

📢 CSS专栏:想学CSS的,冲这里

📢 Krpano专栏:想学VUE的,冲这里

🔔 上述专栏,都在不定期持续更新中!!!!!!!!!!!!!

目录

✨ 前言

全局前置守卫

全局解析守卫

全局后置钩子

路由独享守卫

组件内守卫

完整的导航解析流程

 实现原理

🔔 实现机制

🔔 全局守卫

🔔 组件内守卫

🔔 next 函数

🔔 总结

✨ 结语


 

✨ 前言

        导航守卫是Vue Router中非常重要的一个功能,它可以让我们在路由导航期间进行Hooks操作,比如登录校验、数据预取、页面跳转取消等。合理利用好导航守卫可以大大提高路由的可控性。

        本文将首先介绍导航守卫的种类,包括全局守卫、独享守卫、组件内守卫。然后结合代码示例详细探讨每个守卫的使用场景和方法。

        此外,文中还会剖析导航守卫的内部实现原理,了解其工作流程和 Hooks 调用顺序。守卫函数其实是基于路由系统内部的 Navigation Guards 系统实现的。通过分析其机制,可以更深入理解守卫的运行规则。

        最后,本文将给出一些实战技巧,帮助开发者思考在什么场景下使用哪种类型的导航守卫,以提高实际项目中的开发效率。

        如果你想深入理解导航守卫,或者想在Vue项目中合理利用它们加强路由控制,本文将是一个很好的学习参考。结合示例代码可以快速上手应用。让我们开始探索导航守卫的世界吧!

全局前置守卫

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

全局前置守卫在每次路由导航前被调用,常用于登录校验、权限检查等。

全局解析守卫

router.beforeResolve((to, from) => {
  // ...
})

在 navigation 被确认之前调用,组件内守卫和异步路由组件被解析之后调用。

全局后置钩子

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

导航被确认时调用,不再像前置守卫那样改变导航。

路由独享守卫

const routes = [{
  path: '/about',
  component: About,
  beforeEnter: (to, from) => {
    // ...
  }
}]

在进入某个路由前被调用。

组件内守卫

const Foo = {
  beforeRouteEnter(to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this`
    // 因为当守卫执行前,组件实例还没被创建
  },
  beforeRouteUpdate(to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
  },
  beforeRouteLeave(to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
  }
}

组件内守卫只在进入/离开当前组件的路由时被调用。

完整的导航解析流程

  1. 导航被触发。
  2. 在失活的组件里调用 beforeRouteLeave 守卫。
  3. 调用全局的 beforeEach 守卫。
  4. 在重用的组件里调用 beforeRouteUpdate 守卫(2.2+)。
  5. 在路由配置里调用 beforeEnter
  6. 解析异步路由组件。
  7. 在被激活的组件里调用 beforeRouteEnter
  8. 调用全局的 beforeResolve 守卫(2.5+)。
  9. 导航被确认。
  10. 调用全局的 afterEach 钩子。
  11. 触发 DOM 更新。
  12. 调用 beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。

以上就是 Vue Router 4 中导航守卫的详细介绍,可以利用好这些钩子函数对路由进行更多控制。

 实现原理

🔔 实现机制

  • 导航守卫的核心是路由系统内部的 Navigation Guards 机制。包括 beforeEach、beforeResolve 等函数。
  • 导航过程中会依次调用这些 Guard 函数,并传入 to、from 等路由信息。
  • 每个 Guard 都可以调用 next() 继续pipieline,或者 next(false) 中断导航。

🔔 全局守卫

  • router.beforeEach等注册的守卫会被添加为 Global Before Guards。
  • 会按顺序调用整个 Guard 链,最终执行 router.push 触发导航。

🔔 组件内守卫

  • 组件内的 beforeRouteEnter 等会作为 Component Guards 添加到 Guard 链中。
  • 会在激活组件时调用,执行顺序遵循整个导航解析流程。

🔔 next 函数

  • next 可以接收 false、location 或 error 作为参数来控制流程。
  • 内部通过 callHook 继续执行 Guard 链,或中断导航。

🔔 总结

  • 导航守卫利用了路由系统内部的导航解析流程和钩子函数。
  • 明确其调用时机和 next 函数的作用非常重要,才能灵活运用。

✨ 结语

        在这篇文章中,我们全面地介绍了Vue Router中的导航守卫,包括:

  • 不同类型的导航守卫以及使用场景
  • 导航守卫的内部实现原理
  • next 函数的作用方式
  • 导航解析流程和守卫调用顺序

        导航守卫是一个非常强大的路由功能,可以让我们在页面导航的每一个时机进行控制或干预。

        正确掌握并应用导航守卫,可以防止非法访问,处理异步数据,实现路由权限管理等等。

        希望这篇文章能让你对导航守卫有一个系统的理解,在Vue项目中能灵活地把控路由流程,处理导航中的各种情形。

        如果你有任何问题,欢迎在评论区与我互动讨论。祝你的Vue之路越走越好!

        我们改日再会!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/292414.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

XCode Build报错

XCode Build时报以下错误 B/BL out of range 143266484 (max /-128MB) 错误提示表明生成的机器代码太大,超出了限制 需要在XCode工程中添加宏定义,使得生成的可执行文件超过限制 步骤: 在项目设置页面中,选择 “Build Settings…

Microsoft Word去除页面多余的换行符

大家写论文的时候或者排版的时候可能遇到换行符多出来了导致页面的不美观。像下面这张图一样,虽然latex不会出现这种问题。 处理方式 点击插入然后点击分页 结果展示

自然语言转SQL,一个微调ChatGPT3.5的实例(下)--模型微调及模型性能

提交训练集进行微调 一旦我们创建了JSONL文件(可以在这里或ipfs_here找到一个小样本),下一步是使用以下命令将创建的文件上传到OpenAI: openai.api_key os.getenv("OPENAI_API_KEY") print(openai.File.create(fileo…

人工智能大模型:定义、发展和应用

⭐简单说两句⭐ ✨ 正在努力的小新~ 💖 超级爱分享,分享各种有趣干货! 👩‍💻 提供:模拟面试 | 简历诊断 | 独家简历模板 🌈 感谢关注,关注了你就是我的超级粉丝啦! &…

MySQL之基于代价的慢查询优化建议

1.背景 慢查询是指数据库中查询时间超过指定阈值(美团设置为 100ms)的 SQL,它是数据库的性能杀手,也是业务优化数据库访问的重要抓手。 如何优化慢查询呢?最直接有效的方法就是选用一个查询效率高的索引。关于高效率…

C++之条件编译

在C中,条件编译是一种特殊的编译方式,允许在编译时根据特定条件决定是否编译某段代码。条件编译通常用于在编译时根据不同的平台、编译器或配置选项选择性地包含或排除代码。 C中的条件编译可以通过预处理器指令来实现。预处理器是C编译器的一部分&…

Windows中磁盘未知没有初始化怎么办?

当我们尝试在Windows11/10/8/7上使用外部硬盘驱动器时,在小概率情况下可能会遇到磁盘未知没有初始化情况,此时如果您进入磁盘管理工具中查看,将会发现您的外部硬盘驱动器显示为未知、未初始化、没有磁盘空间,或者在某些情况下它还…

VS Code 如何调试Python文件

VS Code中有1,2,3处跟Run and Debug相关的按钮, 1 处:调试和运行就不多说了,Open Configurations就是打开workspace/.vscode下的lauch.json文件,而Add Configuration就是在lauch.json文件中添加当前运行Python文件的Configuratio…

十二.视图

视图 1.常见数据库对象2.视图概述2.1为什么使用视图2.2视图的理解 3.创建视图3.1创建单表视图3.2创建多表联合试图3.3基于试图创建视图 4.查看视图5.更新视图的数据5.1一般情况5.2不可更新的视图 6.修改、删除视图6.1修改视图6.2删除视图 7.总结7.1视图优点7.2视图不足 1.常见数…

能翻页的电子图册怎么做

​随着科技的进步,电子图册已经成为了越来越多企业宣传和展示产品的重要工具。相比于传统的纸质图册,电子图册具有更多的优点,如方便携带、易于分享、可交互性强等。那么,如何制作一款能翻页的电子图册呢? 一、确定主题…

为什么我不建议大学生接公司单?

大家好,我是鱼皮。前两天,我 编程导航 的鱼友提了个问:大学生怎么接公司的单赚点零花钱? 然后我很认真地评论了一句:我不建议大学生接公司单。 这位小伙伴很认真,又通过微信单独问我: 想了想&am…

右键添加 idea 打开功能

1.开始运行regedit 2.找到: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell _3.开始设置 一、右键shell目录新建项Idea二、右键Idea新建command三、选择Idea 右侧空白出新建字符串 名字为Icon 值填入idea的运行程序地址 四、选择command 默认项填入idea的运行程序地址…

真机调试HarmonyOS应用报错

问题表现: 01/04 19:00:01: Launching com.example.simplevideo $ hdc shell am force-stop com.example.simplevideo $ hdc shell bm uninstall com.example.simplevideo $ hdc file send E:\harmony\SimpleVideo\entry\build\default\outputs\default\entry-defau…

nifi详细介绍--一款开箱即用、功能强大可靠,可用于处理和分发数据的大数据组件

目录 目录 一、引言 二、NiFi 的历史背景介绍 三、NiFi 是什么? 核心特性 应用领域 四、NIFI 入门 五 、NiFi 工作流程 六、实际应用场景 七、优势总结 一、引言 NiFi(Apache NiFi),全名为“Niagara Files”&#xff0…

洗地机什么牌子最好?家用洗地机推荐指南

随着人们对健康和卫生的关注日益增长,洗地机成为了现代家庭清洁的必备工具。然而,在市场上琳琅满目的洗地机品牌中,洗地机哪个品牌最好最实用呢?这是消费者最为关心的问题。现本文将为您介绍几个备受推崇的洗地机品牌,帮助您在众…

【期末复习向】数据可视化技术

一、重点复习 题型:填空题(15道,2分一个)与简答题(3道题目,10分一个)与绘图题(选画2个类型的图) 1.什么是数据可视化 在计算机视觉领域,数据可视化是对数据的…

re:Invent 2023 技术上新|Amazon Q 使用生成式 AI 助理,更快更轻松地获得数据洞察...

Amazon Q in QuickSight 现已提供预览版。现在,您可以体验 Amazon QuickSight 于7月26日发布的生成式 BI 功能,以及为业务用户提供的两项附加功能。 利用 Amazon Q in QuickSight 更快地将见解转化为影响力 随着这项功能的发布,业务用户现在…

Linkage Mapper 各工具参数详解——Barrier Mapper

【小白一学就会无需其他教程】此文档用于解析使用Linkage Mapper 各输入输出参数详情以及可能的影响,并介绍了如何解释模型输出结果和输出参数,适合刚入手的人。篇幅很长很啰嗦,是因为每个参数都解释的万分细致。 从以下链接中获取内容&#…

express+mongoDB开发入门教程之mongoose使用讲解

系列文章 node.js express框架开发入门教程 expressmongoDB开发入门教程之mongoDB安装expressmongoDB开发入门教程之mongoose使用讲解 文章目录 系列文章前言一、Mongoose是什么?二、Mongoose安装三、Mongoose在express项目中使用步骤一、连接mongoDB数据库步骤二、…

游戏缺少emp.dll详细修复教程,快速解决游戏无法启动问题

在现代游戏中,我们经常会遇到一些错误提示,其中之一就是“emp.dll丢失”。emp.dll是一个动态链接库文件,它包含了许多程序运行所需的函数和数据。当一个程序需要调用这些函数时,系统会从emp.dll文件中加载相应的内容。因此&#x…