知识笔记(九十五)———Vue中的导航守卫

直白的说,导航守卫就是路由跳转过程中的一些钩子函数,这些函数能让你在跳转过程中操作一些其他的事儿的时机,这就是导航守卫。

比如最常见的登录权限验证,当用户满足条件时,才让其进入导航,否则就取消跳转,并跳到登录页面让其登录。此时可以使用路由导航来实现。

导航守卫有三种:全局的, 单个路由独享的, 组件级的

单个路由的

写在路由配置中,只在进入路由时触发,不会在 params、query 或 hash 改变时触发

beforeEnter 有三个参数,to,from,next

       {path: '/',name: 'index',component: Index,beforeEnter: (to, from, next) => {console.log(to, from, next);if (uid) {next()} else {next('/login')}}},

全局的

在router/index.js中

beforeEach 使用 router.beforeEach 注册一个全局前置守卫,有两个参数,to,from

router.beforeEach((to, from) => {// 返回 false 以取消导航return false
})

可以返回的值如下:
false: 取消当前的导航。如果浏览器的 URL 改变了(可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。
一个路由地址: 通过一个路由地址跳转到一个不同的地址,就像你调用 router.push() 一样,你可以设置诸如 replace: true 或 name: 'home' 之类的配置

如果什么都没有,undefined 或返回 true,则导航是有效的,并调用下一个导航守卫

beforeResolve        用 router.beforeResolve 注册一个全局解析守卫,在所有组件内守卫和异步路由组件被解析之后,解析守卫就被调用,是获取数据或执行任何其他操作(如果用户无法进入页面时你希望避免执行的操作)的理想位置

afterEach        全局后置钩子,它没有next 参数,也不会改变导航本身,因为此时导航已经完成。对于分析、更改页面标题、声明页面、记录日志等辅助功能以及许多其他事情都很有用

组件内

作为属性写在组件内

beforeRouteEnter 此时组件实例还没被创建,不能获取组件实例this(组合式Api无此函数)

beforeRouteUpdate 在当前路由改变,但是该组件被复用时调用,无法访问组件实例this

beforeRouteLeave 导航离开该组件的对应路由时调用,可以访问组件实例this

<script setup>
import { onBeforeRouteUpdate, onBeforeRouteLeave } from 'vue-router';
import { ref } from 'vue'
const userData = ref()// 与 beforeRouteUpdate 相同,无法访问 `this`
onBeforeRouteUpdate(async (to, from) => {// 在当前路由改变,但是该组件被复用时调用//仅当 id 更改时才获取用户,例如仅 query 或 hash 值已更改if (to.params.id !== from.params.id) {userData.value = await fetchUser(to.params.id)}
})
onBeforeRouteLeave((to, from) => {// 在导航离开渲染该组件的对应路由时调用const answer = window.confirm('你真的想离开吗?您有未保存的更改!')// 取消导航并停留在同一页面上if (!answer) return false
})
</script>

执行顺序:

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

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

相关文章

恒创科技:云服务器配置中的vCPU与物理CPU有啥区别?

​  说到云服务器&#xff0c;您可能经常会遇到vCPU这个词&#xff0c;而且它和物理CPU经常被拿来谈论。尽管它们听起来相似&#xff0c;但两者之间存在显著差异。在本文中&#xff0c;我们将详细讨论云vCPU和物理CPU之间的差异。 物理与虚拟 CPU 和 vCPU 之间最显著的区别在…

游戏渲染管道

高级的渲染步骤是由管道&#xff08;软件架构&#xff09;实现&#xff0c;各个阶段会操作输入流中的数据项&#xff0c;并对输出流产生数据。 管道每个阶段独立于其他阶段&#xff0c;所以管道的最大有点在于非常适合并行化。 渲染管道分为3个概要阶段。但在这里多讲几个阶段…

Maven《四》-- 基于Idea进行Maven工程构建

目录 &#x1f436;4.1 构建概念和构建过程 &#x1f436;4.2 命令方式项目构建 1. &#x1f959;编译&#xff1a;mvn compile 2. &#x1f959;清理&#xff1a;mvn clean 3. &#x1f959;打包&#xff1a;mvn package 4. &#x1f959;安装&#xff1a;mvn install …

第二节 K8S 的架构

第二节 K8S 的架构 K8S 架构图如下: 官方文档: https://kubernetes.io/docs/concepts/architecture/ kube-api-server 是集群的核心&#xff0c; 是k8s中最重要的组件&#xff0c; 因为它是实现声明式api的关键, 整个集群的入口,所有请求都要经过它, api接口服务. kubernetes…

制造业管理软件:为何ERP替代不了MES?

一、ERP和MES的功能区别 ERP是一种综合性的企业管理软件&#xff0c;它涵盖了企业的各个方面&#xff0c;包括财务、采购、库存、销售、人力资源等。它的主要功能是将企业内部的各项业务整合为一个整体进行管理&#xff0c;实现信息共享和协同工作。ERP的主要特点是可以对企业…

街头霸王II神经网络AI训练项目

简介&#xff1a; 该项目通过对街头霸王II进行足够的人工或自动训练&#xff0c;最终生成的神经网络可以让对局双方在AI的掌控下自动进行对局。 要求&#xff1a; 一、MAME版本&#xff1a;MAME01850b-64位 二、ROM版本&#xff1a; “街头霸王Ⅱ加速终极格斗日版”(sf2hfj) …

ESP8266模块双模式(AP+STA)共存同时与电脑及手机进行UDP通信

1.准备工作: 硬件: ESP8266模块 USB连接线: 连接ESP8266模块到电脑 如果电脑没有USB接口,准备一个USB HUB: USB HUB 连接电脑Type-C接口,ESP8266模块连接USB HUB 软件: 安装Arduino IDE 2.2.1 在Arduino IDE中安装esp8266开发板(USB没识别芯片,要安装对应操作系统CH2340或…

k8s集群异常恢复

前提、我自己的k8s采用的是单master节点两个从节点部署&#xff0c;我针对单master情况进行恢复说明 场景一&#xff1a;正常开关虚拟机&#xff0c;可直接重启kubelet进行恢复 1、1、一般重启后三个节点都需要检查&#xff0c;输入命令检查kubelet&#xff1a; systemctl s…

立创EDA学习:PCB布局

目前进度 ESP32最小系统板项目&#xff0c;已完成原理图绘制 点击“更新/转换原理图到PCB” 点击“应用修改” 对应器件的封装就可以对应到PCB中 布局传递 回到原理图&#xff0c;框选每一个模块&#xff0c;“设计-布局传递” 会跳转到PCB界面&#xff0c;可以自己选择放置位…

java使用双异步,性能优化

一、一般我会这样做: 通过POI读取需要导入的Excel;以文件名为表名、列头为列名、并将数据拼接成sql;通过JDBC或mybatis插入数据库;操作起来,如果文件比较多,数据量都很大的时候,会非常慢。 访问之后,感觉没什么反应,实际上已经在读取 + 入库了,只是比较慢而已。 读…

详解APQC流程分级分类框架PCF13个高阶分类和5级业务流程

一&#xff1a;什么是APQC 美国生产力与质量中心(American Productivity and Quality Center&#xff0c;简称为APQC)&#xff0c;创立于1977年是一个会员制的非营利机构&#xff0c;使命是“发现有效的改进方法&#xff0c;广泛地传播其发现成果&#xff0c;实现个人之间及其…

MySQL ORDER BY(排序) 语句

昨天介绍了 MySQL 数据库 UNION 操作符的使用&#xff0c;今天主要讲解下 ORDER BY&#xff08;排序&#xff09;语句。 我们知道从 MySQL 表中使用 SELECT 语句来读取数据。如果需要对读取的数据进行排序&#xff0c;我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字…