vue3 路由守卫
在Vue 3中,路由守卫是一种控制和管理路由跳转的机制。它允许你在执行导航前后进行一些逻辑处理,比如权限验证、数据预取等,从而增强应用的安全性和效率。路由守卫分为几种不同的类型,每种类型的守卫都有其特定的应用场景。
其实路由守卫跟生命周期的钩子函数有相似之处,都是在特定的时机执行特定函数 , 不过路由守卫主要关注的是路由级别的导航控制,而生命周期钩子则更侧重于组件自身的状态变化。
全局守卫
import { createRouter, createWebHistory } from 'vue-router';/ 全局前置守卫
router.beforeEach((to, from, next) => {// 执行权限验证等操作console.log('全局前置守卫');next();
});// 全局解析守卫
router.beforeResolve((to, from, next) => {// 执行某些操作console.log('全局解析守卫');next();
});// 全局后置守卫
router.afterEach((to, from) => {// 执行某些操作console.log('全局后置守卫');
});

- 全局前置守卫 (
beforeEach): 在路由跳转之前执行,在导航开始时最早被调用,通常用于权限验证或登录判断。 - 全局解析守卫 (
beforeResolve): 在导航被确认之前,所有组件内守卫和异步路由组件被解析之后调用。 - 全局后置守卫 (
afterEach): 在路由跳转后执行,常用于页面加载完成后的操作,比如页面标题的更新。
其中函数的参数中
to 与 from : to指的是要导航到的组件,而from是从哪个组件来,to和from都是对象,可以从里面拿到路径,参数,等等一系列的数据
next : 一个函数,用于控制路由导航的流程
next():继续导航。next(false):取消导航。next({ path: '/new-path' }):传入对象,与to中写法类似。next(new Error('Error message')):中断导航并传递错误。next(vm => { ... }):在beforeRouteEnter中使用,获取组件实例。
路由独享守卫
- 路由独享守卫 (
beforeEnter): 在每次导航匹配到该路由时调用 ,只作用于某个具体的路由,可以在路由配置中定义,用于在特定路由进入前执行操作。
{path: '/person',name: 'person',component: person,beforeEnter: (to, from, next) => {// 路由进入前的操作console.log('路由独享守卫 person路由进入前的操作');next();}},

独享守卫是在具体的某条路由规则里面配置的,因此需要写在规则中,且只有要路由到目标组件前时才触发 ,触发时机在beforeEach之后,beforeRouteEnter之前
组件内守卫
<script lang="ts" setup namespace="person">
import { onBeforeRouteLeave, onBeforeRouteUpdate } from 'vue-router';// 离开前守卫
onBeforeRouteLeave((to, from) => {console.log('组件路由离开前 beforeRouteLeave');
});// 依然是当前组件,但是参数更新,如params,query参数
onBeforeRouteUpdate((to, from) => {console.log('组件更新了Route updated');
});
</script><script lang="ts">
/* 这里请注意, vue3的setup,是组件创建时候的钩子因此在setup里面是写不了beforeRouteEnter的beforeRouteEnter是在导航进入该组件之前被调用的*/
import { defineComponent } from 'vue';
export default defineComponent({beforeRouteEnter(to, from, next) {console.log('组件路由进入前 beforeRouteEnter');next();}})</script>
路由进入有组件内路由守卫的组件

离开

在组件参数变化时候

- beforeRouteEnter: 在路由进入前执行的操作,但在组件实例被创建之前调用,因此不能访问组件实例 , 也不能写在vue3的 setup标签内。
- onBeforeRouteUpdate: 在路由更新时执行的操作,比如路由参数发生变化时。
- onBeforeRouteLeave: 在路由离开前执行的操作,可以访问组件实例。
总结
守卫执行顺序
导航到了不同的组件,执行顺序如下:
1. from 的组件内守卫 beforeRouteLeave (如果配置了)
2.全局前置守卫
3.to 的路由独享守卫 (如果配置了)
4.to 的组件内守卫beforeRouteEnter (如果配置了)
5. 全局解析守卫
6.全局后置守卫
导航到了相同的组件,但是参数发生了变化执行顺序如下:
1.全局前置守卫
2.组件内守卫onBeforeRouteUpdater (如果配置了)
3. 全局解析守卫
4.全局后置守卫
注意点
- 在使用路由守卫时,确保总是调用
next()函数,除非你明确想要阻止导航。 - 如果守卫中包含异步操作,确保在异步操作完成后再调用
next(),否则可能会导致路由被阻止。 - 多个守卫函数会按照注册的顺序依次执行,
afterEach守卫会在所有守卫完成后执行。
相关文章:
vue3 路由守卫
在Vue 3中,路由守卫是一种控制和管理路由跳转的机制。它允许你在执行导航前后进行一些逻辑处理,比如权限验证、数据预取等,从而增强应用的安全性和效率。路由守卫分为几种不同的类型,每种类型的守卫都有其特定的应用场景。 其实路…...
【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.
操作环境: MATLAB 2022a 1、算法描述 北方苍鹰优化算法(Northern Goshawk Optimization,简称NGO)是一种新兴的智能优化算法,灵感来源于北方苍鹰的捕猎行为。北方苍鹰是一种敏捷且高效的猛禽,广泛分布于北…...
如何控制自己玩手机的时间?两台苹果手机帮助自律
对一些人来说,被智能手机“绑架”是一件心甘情愿的事,和它相处的一天中,不必面对现实的压力,它就像个“舒适区”。这是因为在使用手机的过程中,应用程序(尤其是游戏和社交媒体应用)会不断刺激大…...
【java-Neo4j 5开发入门篇】-最新Java开发Neo4j
系列文章目录 前言 上一篇文章讲解了Neo4j的基本使用,本篇文章对Java操作Neo4j进行入门级别的阐述,方便读者快速上手对Neo4j的开发。 一、开发环境与代码 1.docker 部署Neo4j #这里使用docker部署Neo4j,需要镜像加速的需要自行配置 docker run --name…...
Python的3D可视化库 - vedo (1)简介和模块功能概览
文章目录 1. vedo和它支持的功能简介1.1 安装vedo1.2 命令行接口1.3 导出3D文件1.4 文件格式转换 2. vedo模块功能概览2.1 绘制和渲染visual 管理可视化、对象及其属性的显示的基类plotter 3D渲染colors 定义和显示颜色dolfin FEniCS/Dolfin库的支持 2.2 图形数据管理mesh 多边…...
全面解析:HTML页面的加载全过程(一)--输入URL地址,与服务器建立连接
用户输入URL地址,与服务器建立连接 用户在浏览器地址栏输入一个URL 浏览器开始执行以下三步操作操作:url解析、DNS查询、TCP连接 第一步:URL解析 什么是URL? URL(Uniform Resource Locator,统一资源定位符)是互联网…...
elasticsearch的倒排索引是什么?
大家好,我是锋哥。今天分享关于【elasticsearch的倒排索引是什么?】面试题。希望对大家有帮助; elasticsearch的倒排索引是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 倒排索引(Inverted Index&a…...
Ubuntu VNC Session启动chromium和firefox报错
问题描述 VNC客户端连接到Ubuntu Server后,启动chromium和firefox时报错: $ chromium [348564:348564:1117/102143.085649:ERROR:ozone_platform_x11.cc(244)] Missing X server or $DISPLAY [348564:348564:1117/102143.085732:ERROR:env.cc(258)] Th…...
【Tealscale + Headscale + 自建服务器】异地组网笔记
文章目录 效果为什么要用 Headscale云服务器安装 Headscale配置 config.yaml创建反向代理搭建管理 UI授权管理 UI添加互联设备参考 效果 首先是连接情况,双端都连接上自建的 Headscale, 手机使用移动流量,测试一下 ping 值 再试试进入游戏 可…...
C++ 编程基础(8)模版 | 8.2、函数模版
文章目录 一、函数模版1、声明与定义2、模版参数3、模板的实例化3.1、隐式实例化3.2、显示实例化 4、模版的特化5、注意事项6、总结 前言: C 函数模板是一种强大的特性,它允许程序员编写与类型无关的代码。通过使用模板,函数或类可以处理不同…...
Android Studio音频视频播放器课程设计
这个项目适合刚刚学习Android studio的初学者,实现音视频的基本播放功能,各项功能的页面都做的比较简单,特别适用于初学者,其特点在于本项目抛开了各种花里胡哨的制作,以最接近初学者的样式画面呈现,完全不…...
速盾:CDN是否支持屏蔽IP?
CDN(内容分发网络)是一种用于提高网站性能和可靠性的技术,通过将内容分发到距离终端用户更近的节点,减少了数据传输的延迟并提高了用户体验。在CDN中,屏蔽IP是一项重要的功能,可以帮助网站屏蔽无效或恶意请…...
机器学习—学习曲线
学习曲线是帮助理解学习算法如何工作的一种方法,作为它所拥有的经验的函数。 绘制一个符合二阶模型的学习曲线,多项式或二次函数,画出交叉验证错误Jcv,以及Jtrain训练错误,所以在这个曲线中,横轴将是Mtrai…...
在 macOS 和 Linux 中,波浪号 `~`的区别
文章目录 1、在 macOS 和 Linux 中,波浪号 ~macOS示例 Linux示例 区别总结其他注意事项示例macOSLinux 结论 2、root 用户的主目录通常是 /root解释示例切换用户使用 su 命令使用 sudo 命令 验证当前用户总结 1、在 macOS 和 Linux 中,波浪号 ~ 在 macO…...
【Java】实战:多数元素
一、题目描述 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出&#x…...
一文解决Latex中的eps报错eps-converted-to.pdf not found: using draft setting.
在使用Vscode配的PDFLatex编译IEEE TII的Latex模板时,出现eps文件不能转换为pdf错误,看了几十篇方法都没用,自己研究了半天终于可以正常运行了。主要原因还是Settings.JSON中的PDFLatex模块缺少:"--shell-escape", 命令…...
计算光纤色散带来的相位移动 matlab
需要注意的地方 1.以下内容纯属个人理解,很有可能不准确,请大家仅做参考 2.光速不要直接用3e8 m/s,需要用精确的2.9979.... 3.光的频率无论在真空还是光纤(介质)都是不变的,是固有属性,但是波长lambdac/f在不同的介…...
国内docker pull拉取镜像的解决方法
访问网站,查找该网站上可用的镜像源,然后替换掉下面代码中的hub-mirror.c.163.com: docker pull hub-mirror.c.163.com/library/nginx:latest 另外,进入到镜像之后,可以使用下面的命令查看操作系统版本。 lsb_releas…...
“Kafka面试攻略:核心问题与高效回答”
1,生产者发送消息的原理 发送消息的过程中,涉及到两个线程,main线程和sender线程,main线程会创建一个双端队列,main线程向双端队列发送消息,sender线程从双端队列里拉取消息,发送给Kafka Broke…...
C++ 多线程std::thread以及条件变量和互斥量的使用
前言 本文章主要介绍C11语法中std::thread的使用,以及条件变量和互斥量的使用。 std::thread介绍 构造函数 std::thread 有4个构造函数 // 默认构造函,构造一个线程对象,在这个线程中不执行任何处理动作 thread() noexcept;// 移动构造函…...
STM32HAL库项目实战:我把W5500和MQTTClient库‘缝’起来,实现了阿里云OTA升级前传
STM32HAL库与W5500深度整合:从MQTT云连接到OTA升级的工程实践 在嵌入式设备智能化浪潮中,远程固件升级(OTA)已成为工业设备的标配功能。本文将揭示如何基于STM32HAL库和W5500以太网芯片构建可靠的云连接通道,为后续OTA升级打下坚实基础。不同…...
【数据结构实战】循环队列FIFO 特性生成六十甲子(天干地支纪年法),实现传统文化里的 “时间轮回”
前言天干地支纪年法是中国传统文化的重要组成部分,十天干与十二地支依次相配,组成六十甲子。本文将使用循环队列这一数据结构完成六十甲子的生成,严格遵循题目要求:定义两个循环队列,分别存储十天干、十二地支队列空则…...
3个高效能的核心功能:League-Toolkit开源工具效率提升指南
3个高效能的核心功能:League-Toolkit开源工具效率提升指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Too…...
WorkBuddy杀疯了?一群AI专家帮我打工,我在微信里当赛博虾工头!
梦瑶 发自 凹非寺量子位 | 公众号 QbitAI到底是谁说,给老板打工自己就当不成老板的?又是谁说,龙虾不好用、还不听使唤的?反正这些事儿,现在跟我没啥关系了。毕竟现在的我,已经转头当起了「虾工头」…...
大模型落地必看:蒸馏、微调、RAG全解析,案例+对比助你快速选对!
做AI落地、大模型应用的朋友,大概率都有过这样的困惑: 想让大模型适配自己的业务,到底该用蒸馏、微调还是RAG? 三者听起来都差不多,都是“优化大模型”,但实际用法、成本、效果天差地别——用错了ÿ…...
Uvicorn性能调优:异步I/O模型选择与配置指南
Uvicorn性能调优:异步I/O模型选择与配置指南 【免费下载链接】uvicorn An ASGI web server, for Python. 🦄 项目地址: https://gitcode.com/GitHub_Trending/uv/uvicorn Uvicorn作为Python生态中最受欢迎的ASGI服务器,其性能表现直接…...
CnDataSeed发布:中国科研工作者跳槽研究数据库(CAMRD)
一、数据简介 追踪学术流动,解析科研人才动力机制! 在中国科研生态快速演化的背景下,科研人才流动是科研创新与学术产出的关键驱动力。但跳槽相关研究在高教研究中一直较为稀缺,系统化、可量化的科研工作者跳槽数据长期缺失&…...
从杂乱桌面到高效办公 GeekDesk实际应用效果展示
评价一款软件产品的优劣,最具说服力的方式莫过于通过真实的实际案例来直观展示其效果和价值。 今天,本文就以几个不同类型用户的真实使用场景为例,完整展示GeekDesk如何帮助他们从杂乱桌面到高效办公的转变过程。 通过这种直观的效果对比&…...
3步搞定ViGEmBus:Windows虚拟游戏手柄驱动终极指南 [特殊字符]
3步搞定ViGEmBus:Windows虚拟游戏手柄驱动终极指南 🎮 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 想要在Windows上体验更丰富的游…...
STM32上如何用串口BREAK中断优雅处理DMX与RDM协议(附完整代码)
STM32串口BREAK中断实现DMX/RDM协议双模通信实战指南 舞台灯光控制系统对实时性和可靠性有着近乎苛刻的要求。作为行业标准的DMX512协议及其扩展协议RDM,承载着数以万计舞台灯具的控制指令。传统基于STM32的软件轮询检测方案常面临响应延迟、误触发等问题࿰…...
