Vue Router 进阶

 Vue Router 通过跳转或取消的方式守卫导航,可以在导航解析的不同节点来控制路由的跳转与取消。定义路由时,可以配置元信息。可以定制页面跳转的过度效果。还可以在程序已经运行的时候添加和删除路由。

1 Router进阶

1.1 导航守卫

守卫,是指通过某种方式来控制路由的跳转与取消。可以全局的、单个路由独享的,或者组件级的方式来提供守卫。

图 完整的导航解析流程。

从beforeRouteLeave 到 beforeResolve,都可以控制路由的跳转与取消。

导航结果

返回值

正常导航

返回undefined、true或没有返回

跳转到其他路由

 返回路径的字符串,或者一个对象(包含name字段,用来指示路由)。

停留在当前路由

返回false。

表 守卫的返回值与控制路由的跳转

// 守卫的不同返回值
router.beforeEach((to,from) => {const name = to.name if (name === 'detail') {return false; // 将不会跳转}if (name === 'other1') {return '/other' // 跳转到这个路由}if (name === 'other2) {return {name: 'user'} // 跳转到名为user的路由}// 正常跳转到目标路由,等效于 return true 或 return undefined
})
// 在定义路由时,为专属路由定义beforeEnter守卫
{path: 'order/:id', name: 'userOrder',component: () => import("@/views/UserOrder.vue"),beforeEnter: (to,from) => {console.log('userOrder route,beforeEnter',to,from)}
}
// 在组合式Api中,定义beforeRouteLeave、beforeRouteUpdate 守卫
<script setup>import { onBeforeRouteLeave, onBeforeRouteUpdate } from 'vue-router'onBeforeRouteLeave((to,from) => {})
</script>

1.2 动态路由

在程序已经运行时可以添加或删除路由,主要是通过router.addRoute() 和 router.removeRoute()这两个函数来实现。

// 在守卫中动态添加路由
router.beforeEach((to,from) => {if (to.name === 'goodsDetail' && !router.hasRoute('goodsDetail')) {// 这里添加的时一个嵌套路由,如果不是嵌套路由,则把第一个参数删除router.addRoute('goodsList',{name: 'goodsDetail',path: 'detail', component: () => import('@/views/GoodsDetail.vue')}) return to.fullPath // 添加完路由后,它仍不会导航到目标路由,需要手动return 一下}
})

当路由被删除时,所有的别名和子路由也会被同时删除。删除路由的不同方法:

  1. 调用router.removeRoute()方法,参数是需要被删除路由的名称。
  2. 通过调用reouter.addRoute()返回的回调:
  3. 添加一个名称冲突的路由,如果添加与现有途径名称相同的路由,会先删除这个路由,再添加新的路由。
const removeRoute = router.addRoute(路由)removeRoute();// 会删除这个路由

1.3 导航故障

如果导航被阻止,导致用户停留在同一个页面上,由router.push返回的Promise解析值将是Navigation Failure。 否则返回值为undefined。

isNavigationFailure 用来检测这个错误类型。

const result = await router.push(‘/other’)if (isNavigationFailure (result,NavigationFailureType.aborted)) {}

枚举值

错误情况

aborted

在导航守卫中返回false,中断了本次导航。

cancelled

在当前导航完成之前又有了一个新的导航。

duplicated

目标位置是当前位置

表 NavigationFailureType 的枚举值对应的错误情况

1.4 扩展RouterLink

通过自定义一个RouterLink,来满足某些业务场景。

<script lang="ts" setup>
import {computed, defineProps} from "vue";import {RouterLink} from "vue-router";const props = defineProps({...RouterLink.props,inactiveClass: String})const isExternalLink = computed(() => {return typeof props.to === 'string' && props.to.startsWith('http')})
</script><template><a v-if="isExternalLink" v-bind="$attrs" :href="to" target="_blank"><slot /></a><router-linkv-elsev-bind="$props"customv-slot="{ isActive, href, navigate }"><a v-bind="$attrs" :href="href" @click="navigate" :class="isActive ? activeClass : inactiveClass"><slot /></a></router-link>
</template>

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

高品质定制线缆知名智造品牌推荐-精工电联:高压线缆行业定制服务的领航者

定制线缆源头厂家推荐-精工电联&#xff1a;高压线缆行业定制服务的领航者 在当今这个高度信息化的社会&#xff0c;电力传输与分配系统的稳定运行至关重要。作为连接各个电力设备的纽带&#xff0c;高压线缆的质量直接关系到电力系统的安全性和稳定性。在定制高压线缆行业中&a…

Apache DolphinScheduler用户线上Meetup火热来袭!

Apache DolphinScheduler 社区 8 月用户交流会精彩继续&#xff01;本次活动邀请到老牌农牧产品实业集团铁骑力士架构工程师&#xff0c;来分享Apache DolphinScheduler在现代农牧食品加工场景中的应用实践。此外&#xff0c;还将有社区活跃贡献者以Apache DolphinScheduler为例…

C语言进阶 13. 文件

C语言进阶 13. 文件 文章目录 C语言进阶 13. 文件13.1. 格式化输入输出13.2. 文件输入输出13.3. 二进制文件13.4. 按位运算13.5. 移位运算13.6. 位运算例子13.7. 位段 13.1. 格式化输入输出 格式化输入输出: printf %[flags][width][.prec][hlL]type scanf %[flags]type %[fl…

Spring Boot:SpringBoot入门

本文是跟着B站"黑马程序员"up主的SpringBoot3vue3的视频的学习过程记录&#xff0c;仅用于学习记录 视频里的图&#xff1a; 呃。。。。都没有学过这些。。。。。 不管了&#xff0c;先学。。。。。。入门&#xff1a; 创建Maven工程 导入spring-boot-stater-web起…

AI测试:人工智能模型的核心测试指标,分类判别、目标检测、图像分割、定量计算分别有哪些指标?

在前面的人工智能测试技术系列文章中&#xff0c;我们详细介绍了人工智能测试的技术方法和实践流程。在了解人工智能测试方法后&#xff0c;我们需要进一步学习和研究如何衡量这些方法的有效性&#xff0c;即人工智能模型测试指标的选择。测试指标的选择主要取决于模型的类型和…

MySQL基础练习题15-进店却未进行交易过的顾客

题目&#xff1a;有一些顾客可能光顾了购物中心但没有进行交易。来查找这些顾客的 ID &#xff0c;以及他们只光顾不交易的次数。 准备数据 分析数据 题目&#xff1a;有一些顾客可能光顾了购物中心但没有进行交易。来查找这些顾客的 ID &#xff0c;以及他们只光顾不交易的次…

介绍五款广受好评的企业级加密软件

在当今信息化时代&#xff0c;数据安全已成为企业管理的重要环节。随着网络攻击和数据泄露事件的频繁发生&#xff0c;如何有效保护企业数据不被泄露&#xff0c;成为各大企业关注的焦点。加密软件作为一种有效的防护工具&#xff0c;通过对数据进行加密处理&#xff0c;确保敏…

最好用的复制粘贴软件pastemate功能简介

这应当是windows下最好用的复制粘贴软件&#xff0c;遥遥领先的复制粘贴软件。 效增PasteMate - 下载页面 windows下界面最优美&#xff0c;操作最方便的复制粘贴神器&#xff0c;学生党论文必备&#xff0c;效率神器 pastemate 1.搜索功能&#xff0c;能够按文本、图片、文件…

AI多模态模型架构之输出映射器:Output Projector

〔探索AI的无限可能&#xff0c;微信关注“AIGCmagic”公众号&#xff0c;让AIGC科技点亮生活〕 本文作者&#xff1a;AIGCmagic社区 刘一手 前言 AI多模态大模型发展至今&#xff0c;每年都有非常优秀的工作产出&#xff0c;按照当前模型设计思路&#xff0c;多模态大模型的…

解析和解决Protobuf数据传输中的字段错位问题

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

【Linux】全志Tina etc目录下关键文件内容修改

一、文件位置 V:\f1c100s\Evenurs\f1c100s\tina\target\allwinner\c200s-F1C200s\busybox-init-base-files\etc\ssv6x5x-wifi.cfg 二、文件内容 三、介绍 在此目录下&#xff0c;可以修改在etc目录下的文件内容&#xff0c;此处举例修改一个wifi模块的配置文件数据。

【前端 20】Element-UI快速入门

探索Element UI组件库&#xff1a;快速搭建Vue应用的必备工具 在现代Web开发中&#xff0c;Vue.js以其轻量级和灵活性赢得了广泛的关注。而Element UI&#xff0c;作为Vue.js的一个UI组件库&#xff0c;更是为开发者们提供了丰富、易用的前端组件&#xff0c;极大地加速了开发过…

【Spring】——Spring概述、IOC、IOC创建对象的方式、Spring配置、依赖注入(DI)以及自动装配知识

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

前端vue3 巧妙的checkbox 选中框样式

我们 做前端页面交互效果的时候 我们会使用到 checkbox 复选框 做一些交互的效果 我是用的是 nut-ui 组件库中的 checkbox 组件 类似于这样的选中效果 假如 二选一的那种 可以 这样写 交互好看 而不是单纯的 checkbox 框 这里我就不使用 gif 图片了 大家应该都可以看懂的 …

操作系统课程设计:(JAVA)进程管理系统(附源码zip,jdk11,IDEA Ultimate2024 )

一.题目要求描述 本设计的目的是加深对进程概念及进程管理各部分内容的理解&#xff1b;熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通讯机构的实施。要求设计一个允许n个进程并发运行的进程管理模拟系统。 该系统包括有简单的进程控制、同步与…

Spring AOP总结

1、AOP&#xff08;Aspect-Oriented Programming&#xff09;&#xff1a;面向切面编程让开发更高效。 工作中经常需要处理日志记录、事物管理、安全控制等跨越多个业务模块的公共逻辑。 它是一种编程的范式。它通过将跨多个业务模块的公共逻辑抽取并封装成独立的模块&#xf…

微信小程序云开发订单微信支付与小票和标签打印的完整高效流程

一个字“全”&#xff01;&#xff01;&#xff01; 前言一、流程设定1、如何开通云支付流程2、以订单下单为例的支付流程2.1 业务场景介绍2.2 业务场景流程图 二、代码与代码文件组成1、页面JS2、云函数payPre3、支付回调函数pay_cb3.1 准备条件3.2 必要认知3.3 pay_cb 完整函…

Python使用pytest-benchmark做基准测试

安装pytest-benchmark pip install pytest-benchmark代码编写 导入pytest import pytest我们以“在120以内的正整数中找出和120互质的正整数&#xff0c;并统计个数和求和”为例&#xff0c;比较穷举和使用数学技巧完成该任务的性能。 def coprime_120_1():count 0sum 0f…

Java 8-函数式接口

目录 一、概述 二、 函数式接口作为方法的参数 三、函数式接口作为方法的返回值 四、 常用的函数式接口 简单总结 简单示例 4.1 Consumer接口 简单案例 自我练习 实际应用场景 多线程处理 4.2 Supplier接口 简单案例 自我练习 实际应用场景 配置管理 4.3 Func…

MindIE Service服务化集成部署通义千问Qwen模型

一、昇腾开发者平台申请镜像 登录Ascend官网昇腾社区-官网丨昇腾万里 让智能无所不及 二、登录并下载mindie镜像 #登录docker login -u XXX#密码XXX#下载镜像docker pull XXX 三、下载Qwen的镜像 使用wget命令下载Qwen1.5-0.5B-Chat镜像&#xff0c;放在/mnt/Qwen/Qwen1.5-…