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之路越走越好!

        我们改日再会!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

非英专生雅思首考 8 分经验贴

非英专生雅思首考 8 分经验贴 备考材料1.网站2.微信公众号3.APP4.PDF资料5.纸质教辅书 四个单项听力阅读写作口语注意事项 又来了,好文当分享!如侵删。 背景:某工科学校经管类专业学生,7月份刚毕业。四级643,六级604。…

Netty实战(待完善)

Netty组件 1. Bootstrap, ServerBootstrap Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类。 2. NioEventLoop, NioEventLoopGroup NioEventLoop 中维护了一个线程和任务队列,支持异步提交执行任务,…

Spring——Spring IOC(1)

Spring IOC 创建工程: 1.程序的耦合 耦合:耦合指的就是对象之间的依赖关系。对象之间的耦合越高,维护成本越高。 案例:没有引入IOC容器时系统的Web层、业务层、持久层存在耦合 /*** 持久层实现类*/ public class UserDaoImpl …

SpringBoot的测试

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,…

12.递归汉诺塔

使用递归实现汉诺塔 public class Main {public static void move(char pos1,char pos2) {System.out.print(pos1" > "pos2" ");}public static void han(int n,char pos1,char pos2,char pos3) {if(n 1) {move(pos1,pos3);return ;}han(n-1,pos1,pos…

阿里、字节等大厂系统测试方法的知识点总结,终于被我搞到手了

系统测试一般采取黑盒测试,系统测试的方法也比较多,其中常用的方法有:多任务测试、临界测试、中断测试、等价划分测试 多任务测试 多任务测试是指在非idle状态下,测试对象处于工作状态时,有新的事件发生,…

multipath 内核接口及框架介绍

文章目录 1 云主机使用网络存储 io 流程2 multipath 介绍 1 云主机使用网络存储 io 流程 对于一个云服务环境,大致会有网络节点,存储节点,计算节点,控制节点,其中虚拟云主机在计算节点工作,而虚拟云主机&a…

LCR 176. 判断是否为平衡二叉树

解题思路: class Solution {public boolean isBalanced(TreeNode root) {return recur(root) ! -1;}private int recur(TreeNode root) {if (root null) return 0;int left recur(root.left);if(left -1) return -1;int right recur(root.right);if(right -1) …

ebay头像如何设置?eBay店铺的头像怎么改?-站斧浏览器

ebay头像如何设置? eBay店铺的头像可以通过以下方式进行设置: 登录eBay账户:店主需要使用自己的eBay账号登录到eBay网站。 进入店铺管理后台:在登录后,店主可以点击页面右上角的用户名或店铺名称,从下拉…

被低估的流量宝地,如何通过Reddit为Shopify店铺引流?

独立站店铺相对于电商平台来说,有一个运营难点那就是需要自主引流。做好引流,你的Shopify店铺也就成功了一半。Reddit作为国外知名的论坛平台,非常适合作为引流的阵地,许多人对这个网站尚不了解,接下来就为大家介绍如何…

HackTheBox - Medium - Linux - Socket

Socket Socket 是一台中等难度的 Linux 机器,其特点是反转 Linux/Windows 桌面应用程序以获取其源代码,从那里发现其 Web 套接字服务中的“SQL”注入。转储数据库会显示一个哈希值,一旦破解,就会产生对该框的“SSH”访问。最后&a…

1295. X的因子链(数论/求1~N的所以质因子)

题目&#xff1a; 1295. X的因子链 - AcWing题库 输入样例&#xff1a; 2 3 4 10 100输出样例&#xff1a; 1 1 1 1 2 1 2 2 4 6 思路&#xff1a; 代码&#xff1a; #include <cstdio> #include <cstring> #include <iostream> #include <algorithm…

Gin 路由注册与请求参数获取

Gin 路由注册与请求参数获取 文章目录 Gin 路由注册与请求参数获取一、Web应用开发的两种模式1.前后端不分离模式2.前后端分离模式 二、RESTful介绍三、API接口3.1 RESTful API设计指南3.2 API与用户的通信协议3.3 RestFul API接口设计规范3.3.1 api接口3.3.2 接口文档&#xf…

viewer插件——预览图片时一直闪烁——问题修复,亲测有效

viewer插件——预览图片时一直闪烁——问题修复&#xff0c;亲测有效 viewer插件的介绍遇到的问题——图片会一直重复加载&#xff0c;造成图片在闪烁的效果解决方法 viewer插件的介绍 之前写过一篇文章&#xff0c;是关于v-viewer图片预览插件——vue2插件集合(elementUi中的…

JAVA 终极面试题

目录标题 一: JAVA 基础1.JDK和JRE有什么区别&#xff1f;2. 面向对象的特征&#xff08;了解&#xff09;3. 和equals的区别是什么&#xff1f;4.两个对象的hashCode()相同,则equals()一定为true&#xff0c;对吗&#xff1f;5.final关键字在java中的作用6.java中的Math.round…

bat批处理文件_命令汇总(1)

文章目录 1、复制文件&#xff1a;2、 移动文件&#xff1a;3、删除文件&#xff1a;4、创建目录&#xff1a;5、删除目录&#xff1a;6、切换目录&#xff1a;7、显示当前目录&#xff1a;8、运行程序&#xff1a;9、显示系统环境变量&#xff1a;10、设置环境变量&#xff1a…

HCIA-Datacom题库(自己整理分类的)——OSPF协议判断

1.路由表中某条路由信息的Proto为OSPF则此路由的优先级一定为10。√ 2.如果网络管理员没有配置骨干区域,则路由器会自动创建骨干区域&#xff1f; 路由表中某条路由信息的Proto为OSPF&#xff0c;则此路由的优先级一定为10。 当两台OSPF路由器形成2-WAY邻居关系时&#xff0…

Android 相机库CameraView源码解析 (四) : 带滤镜预览

1. 前言 这段时间&#xff0c;在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位&#xff0c;在项目前期&#xff0c;的确为我们节省了不少时间。 但随着项目持续深入&#xff0c;对于CameraView的使用进入深水区&#xff0c;逐…

【OpenBMC】的内部README 模板

OpenBMC 本项目的AST2500分支核心代码的机型是ast2500-default&#xff0c;克隆代码后进入编译环境的命令为&#xff1a; source setup ast2500-default 一、源码下载、配置以及编译 重要&#xff1a;请参阅confluence 详细步骤 二、代码使用方法 目前所有自定义修改的代码…

Node.js 文件写入详解:最佳实践与示例

文件写入是 Node.js 中的一项重要任务&#xff0c;它允许你将数据保存到本地文件系统中&#xff0c;供后续使用。这个功能在许多应用中都有广泛的应用&#xff0c;包括数据备份、日志记录、配置文件更新等。在本文&#xff0c;我们将介绍如何在 Node.js 中执行文件写入操作&…