当前位置: 首页 > news >正文

【愚公系列】《循序渐进Vue.js 3.x前端开发实践》061-Vue Router的动态路由

标题详情
作者简介愚公搬代码
头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
近期荣誉2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
博客内容.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
欢迎👍点赞、✍评论、⭐收藏

文章目录

  • 🚀前言
  • 🚀一、Vue Router的动态路由
    • 🔎1. 动态添加路由
      • 🦋1.1 使用 `addRoute` 动态添加路由
      • 🦋1.2 动态添加重复路由
      • 🦋1.3 删除动态添加的路由
      • 🦋1.4 通过路由名称删除路由
    • 🔎2. 检查路由和获取路由
      • 🦋2.1 检查路由是否存在
      • 🦋2.2 获取所有路由
    • 🔎3. 动态路由的使用场景
    • 🔎4.总结


🚀前言

在现代单页面应用(SPA)的开发中,灵活而高效的路由管理是实现良好用户体验的关键。而 Vue Router 作为 Vue.js 的官方路由管理工具,提供了强大的动态路由功能,使得开发者能够根据应用需求动态地配置和渲染路由。这种灵活性不仅可以简化代码结构,还能降低项目的复杂度,让开发者专注于业务逻辑的实现。

本文将深入探讨 Vue Router 中的动态路由,重点介绍如何定义和使用动态路由参数、如何通过动态路由实现更复杂的页面结构,以及如何在实际开发中利用动态路由提升应用的可维护性和扩展性。我们将通过实例演示,展示动态路由在不同场景下的应用,帮助你更好地理解这一强大功能的实际价值。

🚀一、Vue Router的动态路由

在 Vue Router 中,除了静态配置路由的方式(即在 main.js 文件中进行配置),还支持在运行时动态地添加和删除路由。这样可以让应用更灵活,特别是在一些场景中(如权限控制、按需加载等)需要动态控制路由时。

🔎1. 动态添加路由

addRoute 方法允许你在运行时向 Vue Router 中动态添加一条新的路由。动态添加的路由会立即生效。

🦋1.1 使用 addRoute 动态添加路由

例如,我们可以在 DemoOne.vue 组件中,通过点击按钮动态添加一条路由。

首先,修改 DemoOne.vue 文件:

<template><h1>示例页面 1</h1><el-button type="primary" @click="click">跳转到 Demo2</el-button>
</template><script setup>
import { useRouter } from 'vue-router'
import Demo2 from './DemoTwo.vue'let router = useRouter()// 动态添加一条路由
router.addRoute({path: '/new/demo2',component: Demo2
})// 跳转到动态添加的路由
function click() {router.push('/new/demo2')
}
</script>

在上面的代码中,我们做了以下几件事:

  1. 使用 useRouter 获取路由实例。
  2. DemoOne 组件加载时,使用 addRoute 动态添加了一条路径为 /new/demo2 的路由,指向 Demo2 组件。
  3. 通过点击按钮调用 router.push('/new/demo2') 来跳转到刚刚动态添加的路由。

注意:

  • 如果你在浏览器直接访问 /new/demo2,会报错,因为路由是在页面加载后动态添加的,不在初始的路由配置中。只有在先访问 /demo1 并触发添加路由的代码后,才能跳转。

🦋1.2 动态添加重复路由

如果你在动态添加路由时,添加了一个已经存在的路由路径或名称,新的路由会覆盖旧的路由。

例如:

router.addRoute({path: '/demo2',component: Demo2,name: 'Demo2'
})router.addRoute({path: '/d2',component: Demo2,name: 'Demo2'  // 重新定义了同名路由
})

在上述代码中,第二次添加的 /d2 路由会替换掉第一个 /demo2 路由。也就是说,后添加的路由会覆盖前面的同名路由。

🦋1.3 删除动态添加的路由

在使用 addRoute 方法时,返回的是一个删除路由的回调函数,你可以调用这个回调函数来删除动态添加的路由。

示例代码:

let call = router.addRoute({path: '/demo2',component: Demo2,name: 'Demo2'
})// 调用回调函数删除路由
call()

通过执行 call(),我们可以直接删除刚刚动态添加的 /demo2 路由。

🦋1.4 通过路由名称删除路由

如果你为路由设置了名称,还可以通过路由名称来删除路由。例如:

router.addRoute({path: '/demo2',component: Demo2,name: 'Demo2'
})// 通过名称删除路由
router.removeRoute('Demo2')

在这种情况下,removeRoute('Demo2') 会删除所有路径为 /demo2 且名称为 Demo2 的路由。同时,相关的别名和子路由也会被一并删除。

🔎2. 检查路由和获取路由

在 Vue Router 中,还提供了一些方法来检查和获取当前路由的状态。

🦋2.1 检查路由是否存在

可以使用 hasRoute 方法来检查某个路由是否已经被添加到路由中。例如:

console.log(router.hasRoute('Demo2'))  // 检查路由是否存在

hasRoute 方法会返回一个布尔值,表示路由是否已经注册。

🦋2.2 获取所有路由

getRoutes 方法可以用来获取当前所有已经注册的路由对象。它会返回一个包含所有路由的数组。

示例代码:

console.log(router.getRoutes())  // 获取所有已注册的路由

该方法返回的数组包含了当前所有的路由对象,可以用于调试或路由管理。

🔎3. 动态路由的使用场景

动态添加和删除路由在以下场景中非常有用:

  • 权限控制:根据用户权限动态添加或删除某些路由。例如,某些路由仅在用户登录时可见,或者某些页面只能由特定角色访问。
  • 按需加载:根据需要加载某些页面或组件,避免一次性加载所有页面。
  • 路由重定向:动态修改路由,实现在运行时进行重定向或改变页面跳转行为。

🔎4.总结

  1. 动态添加路由:通过 addRoute 方法,可以在应用运行时动态地添加一条路由。添加的路由会立即生效,但如果在浏览器中直接访问未添加的路由时,会报错。需要先访问某个路由,才能触发添加。
  2. 删除路由:可以通过 addRoute 方法返回的删除回调函数来删除动态添加的路由,也可以通过 removeRoute 方法按路由名称删除路由。
  3. 检查和获取路由:使用 hasRoutegetRoutes 方法可以检查路由是否存在和获取所有路由列表。

通过动态添加、删除和管理路由,Vue Router 提供了更加灵活的路由控制,使得应用能根据不同的需求进行高效的路由管理。

相关文章:

【愚公系列】《循序渐进Vue.js 3.x前端开发实践》061-Vue Router的动态路由

标题详情作者简介愚公搬代码头衔华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xff0c;阿里云签约作者&#xff0c;腾讯云优秀博主&…...

杭州某小厂面试

问的都是基础知识&#xff0c;主要是三个部分&#xff1a;计网&#xff0c;数据库&#xff0c;java。计网答得挺好&#xff0c;数据答得一般&#xff0c;Java答得一坨。 目录 1.TCP/IP协议的5层模型 2.3次握手和4次挥手 3.操作系统中的进程和线程的区别 4.lunix top 命令看…...

C基础寒假练习(8)

一、终端输入10个学生成绩&#xff0c;使用冒泡排序对学生成绩从低到高排序 #include <stdio.h> int main(int argc, const char *argv[]) {int arr[10]; // 定义一个长度为10的整型数组&#xff0c;用于存储学生成绩int len sizeof(arr) / sizeof(arr[0]); // 计算数组…...

设计模式 ->模板方法模式(Template Method Pattern)

模板方法模式 模板方法模式是一种行为设计模式&#xff0c;它在一个方法中定义一个操作的算法骨架&#xff0c;而将一些步骤延迟到子类中实现。它允许子类在不改变算法结构的情况下重新定义算法中的某些步骤 特点 算法骨架&#xff1a; 在基类中定义算法的框架延迟实现&…...

Redis存储⑤Redis五大数据类型之 List 和 Set。

目录 1. List 列表 1.1 List 列表常见命令 1.2 阻塞版本命令 1.3 List命令总结和内部编码 1.4 List典型使用场景 1.4.1 消息队列 1.4.2 分频道的消息队列 1.4.3 微博 Timeline 2. Set 集合 2.1 Set 集合常见命令 2.2 Set 集合间命令 2.3 Set命令小结和内部编码 2.…...

MySQL开窗函数种类和使用总结

在 MySQL 中&#xff0c;开窗函数&#xff08;Window Functions&#xff09; 是一种强大的功能&#xff0c;能够在数据分析和聚合时提供灵活的方式。开窗函数在 MySQL 8.0 及以上版本 中引入&#xff0c;可以基于数据的某个分组&#xff08;窗口&#xff09;来执行计算&#xf…...

DeepSeek——DeepSeek模型部署实战

摘要 文章主要介绍了DeepSeek大模型的本地部署方法、使用方式以及API接入相关内容。首先指出可通过下载Ollama来部署DeepSeek-R1模型&#xff0c;并给出了模型不同参数版本及存储信息。接着说明了如何通过Chatbox官网下载并接入DeepSeek API&#xff0c;以及如何接入本地部署模…...

zsh: command not found: pip

当你在终端输入 pip install ipykernel 时出现 zsh: command not found: pip 错误&#xff0c;这表明系统无法找到 pip 命令&#xff0c;下面为你详细分析可能的原因以及对应的解决办法。 可能的原因 Python 未安装&#xff1a;pip 是 Python 的包管理工具&#xff0c;若你的…...

机器学习数学基础:16.方程组

一、方程组基础概念 &#xff08;一&#xff09;定义 方程组是由若干个包含未知数的方程组合而成的集合。例如&#xff0c; { 3 x 2 y − z 7 2 x − y 3 z 5 x 4 y − 2 z 3 \begin{cases}3x 2y - z 7\\2x - y 3z 5\\x 4y - 2z 3\end{cases} ⎩ ⎨ ⎧​3x2y−z7…...

即梦(Dreamina)技术浅析(四):生成对抗网络

即梦(Dreamina) 的生成对抗网络(GAN,Generative Adversarial Network)技术是其核心功能之一,用于生成高质量的图像、文本和视频内容。GAN 是一种深度学习模型,由生成器(Generator)和判别器(Discriminator)两部分组成,通过对抗训练的方式不断提升生成内容的质量。 …...

2025年软件测试五大趋势:AI、API安全、云测试等前沿实践

随着软件开发的不断进步&#xff0c;测试方法也在演变。企业需要紧跟新兴趋势&#xff0c;以提升软件质量、提高测试效率&#xff0c;并确保安全性&#xff0c;在竞争激烈的技术环境中保持领先地位。本文将深入探讨2025年最值得关注的五大软件测试趋势。 Parasoft下载https://…...

Vue混入(Mixins)与插件开发深度解析

Vue混入&#xff08;Mixins&#xff09;与插件开发深度解析 Vue混入&#xff08;Mixins&#xff09;与插件开发深度解析1. Vue混入&#xff08;Mixins&#xff09;核心概念1.1 什么是混入1.1.1 本质定义与技术定位1.1.2 混入与相关概念的对比1.1.3 适用场景分析1.1.4 设计哲学与…...

【C++】C++11

目录 C11简介 统一的列表初始化 {}初始化 std::initializer_list 声明 auto decltype nullptr 范围for循环 智能指针 STL中的一些变化 右值引用和移动语义 左值引用和右值引用 右值引用的意义 完美转发 lambda表达式 新的类功能 可变参数模版 包装器 func…...

k8sollama部署deepseek-R1模型,内网无坑

这是目录 linux下载ollama模型文件下载到本地,打包迁移到k8s等无网络环境使用下载打包ollama镜像非k8s环境使用k8s部署访问方式非ollama运行deepseek模型linux下载ollama 下载后可存放其他服务器 curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linu…...

mysql8 C++源码中创建表函数,表字段最大数量限制,表行最大存储限制

在 MySQL 8 的 C 源码中&#xff0c;表的最大字段数量限制体现在 MAX_FIELDS 宏定义中。这个宏定义了表中可以拥有的最大字段数量。 代码中的体现 在 mysql_prepare_create_table 函数中&#xff0c;有以下代码段检查表的字段数量是否超过最大限制&#xff1a; cpp if (alt…...

胜任力冰山模型:深入探索职业能力的多维结构

目录 1、序言 2、什么是胜任力&#xff1f; 3、任职资格和胜任力的区别 4、胜任力冰山模型&#xff1a;职场能力的多维展现 4.1、冰山水面上的部分 4.2、冰山水面下的部分 4.3、深层的个人特质与价值观 5、如何平衡任职资格与胜任能力 6、结语 1、序言 在快速发展的I…...

什么是三层交换技术?与二层有什么区别?

什么是三层交换技术&#xff1f;让你的网络飞起来&#xff01; 一. 什么是三层交换技术&#xff1f;二. 工作原理三. 优点四. 应用场景五. 总结 前言 点个免费的赞和关注&#xff0c;有错误的地方请指出&#xff0c;看个人主页有惊喜。 作者&#xff1a;神的孩子都在歌唱 大家好…...

Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell 替代】

&#x1f380;&#x1f380;Shell语法入门篇 系列篇 &#x1f380;&#x1f380; LinuxDocer 容器化部署之 Shell 语法入门篇 【准备阶段】LinuxDocer 容器化部署之 Shell 语法入门篇 【Shell变量】LinuxDocer 容器化部署之 Shell 语法入门篇 【Shell数组与函数】LinuxDocer 容…...

DeepSeek LLM(初代)阅读报告

概况 这个是deepseek发布的第一版模型对应的技术报告&#xff0c;模型发布于23年11月&#xff0c;本报告发布于24年1月。 模型有7B和67B两个版本。 虽然本报告中还没有用上后面V2/V3和R1中的关键技术例如MLA、MTP、GRPO&#xff0c;但是报告中已经指明了MoE、强化学习等未来…...

JAVA异步的TCP 通讯-服务端

一、服务端代码示例 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.AsynchronousServerSocketChannel; import java.nio.channels.AsynchronousSocketChannel; import java.nio.channels.Completion…...

【技能篇】RabbitMQ消息中间件面试专题

1. RabbitMQ 中的 broker 是指什么&#xff1f;cluster 又是指什么&#xff1f; 2. 什么是元数据&#xff1f;元数据分为哪些类型&#xff1f;包括哪些内容&#xff1f;与 cluster 相关的元数据有哪些&#xff1f;元数据是如何保存的&#xff1f;元数据在 cluster 中是如何分布…...

Ubuntu开机自动运行Docker容器中的Qt UI程序

Ubuntu开机自动运行Docker容器中的Qt UI程序 引言为什么需要这样配置?解决方案概览详细实现步骤1. 创建容器启动脚本2. 创建系统服务3. 配置自动登录和显示设置常见问题解决方案1. 程序无法显示(X11权限问题)2. 分辨率设置不生效3. 服务启动失败安全注意事项结语附录:完整文…...

C++ 模板元编程语法大全

C 模板元编程语法大全 模板元编程(Template Metaprogramming, TMP)是C中利用模板在编译期进行计算和代码生成的强大技术。以下是C模板元编程的核心语法和概念总结&#xff1a; 1. 基础模板语法 类模板 template <typename T> class MyClass {// 类定义 };函数模板 t…...

c/c++的opencv图像金字塔缩放

图像金字塔缩放&#xff1a;OpenCV C/C 实践 &#x1f4d0; 图像金字塔是计算机视觉中一种重要且基础的多尺度表示方法。它通过对原始图像进行连续的下采样&#xff08;缩小&#xff09;或上采样&#xff08;放大&#xff09;操作&#xff0c;生成一系列不同分辨率的图像。这些…...

UniApp 生产批次管理模块技术文档

UniApp 生产批次管理模块技术文档 1. 运行卡入站页面 (RunCardIn) 1.1 页面结构 <template><!-- 页面容器 --><view class"runCardIn" :style"{ paddingTop: padding }"><!-- 页头组件 --><pageHeader :title"$t(MENU:…...

【笔记】2025 年 Windows 系统下 abu 量化交易库部署与适配指南

#工作记录 前言 在量化交易的学习探索中&#xff0c;偶然接触到 2017 年开源的 abu 量化交易库&#xff0c;其代码结构和思路对新手理解量化回测、指标分析等基础逻辑有一定参考价值。然而&#xff0c;当尝试在 2025 年的开发环境中部署这个久未更新的项目时&#xff0c;遇到…...

[蓝帽杯 2022 初赛]网站取证_2

一、找到与数据库有关系的PHP文件 打开内容如下&#xff0c;发现数据库密码是函数my_encrypt()返回的结果。 二、在文件夹encrypt中找到encrypt.php,内容如下&#xff0c;其中mcrypt已不再使用&#xff0c;所以使用php>7版本可能没有执行结果&#xff0c;需要换成较低版本…...

.NET 8使用AOT发布ASP.NET Core应用

.NET 8 使用 AOT 发布 ASP.NET Core 应用 一、AOT 编译简介 在 .NET 开发中&#xff0c;编译方式有多种&#xff0c;其中 AOT&#xff08;Ahead-Of-Time&#xff09;编译是一种区别于传统 JIT&#xff08;Just-In-Time&#xff09;编译的方式。传统的 JIT 编译是在 .NET 应用…...

基于Geotools的Worldpop世界人口tif解析-以中国2020年数据为例

目录 前言 一、Worldpop数据简介 1、数据来源 2、QGIS数据展示 3、元数据展示 二、GeoTools人口解析 1、Maven依赖引入 2、Tif人口计算 三、总结 前言 在当今数字化与信息化飞速发展的时代&#xff0c;地理空间数据的分析与应用已然成为诸多领域研究与决策的关键支撑。…...

Knife4j框架的使用

文章目录 引入依赖配置Knife4j使用Knife4j 访问 SpringBoot 生成的文档 Knife4j 是基于 Swagger 的增强工具&#xff0c;对 Swagger 进行了拓展和优化&#xff0c;从而有更美观的界面设计和更强的功能 引入依赖 Spring Boot 2.7.18 版本 <dependency> <groupId>c…...