【愚公系列】《循序渐进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>
在上面的代码中,我们做了以下几件事:
- 使用
useRouter获取路由实例。 - 在
DemoOne组件加载时,使用addRoute动态添加了一条路径为/new/demo2的路由,指向Demo2组件。 - 通过点击按钮调用
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.总结
- 动态添加路由:通过
addRoute方法,可以在应用运行时动态地添加一条路由。添加的路由会立即生效,但如果在浏览器中直接访问未添加的路由时,会报错。需要先访问某个路由,才能触发添加。 - 删除路由:可以通过
addRoute方法返回的删除回调函数来删除动态添加的路由,也可以通过removeRoute方法按路由名称删除路由。 - 检查和获取路由:使用
hasRoute和getRoutes方法可以检查路由是否存在和获取所有路由列表。
通过动态添加、删除和管理路由,Vue Router 提供了更加灵活的路由控制,使得应用能根据不同的需求进行高效的路由管理。
相关文章:
【愚公系列】《循序渐进Vue.js 3.x前端开发实践》061-Vue Router的动态路由
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主&…...
流媒体缓存管理策略
缓存管理策略是指为了优化性能、资源使用和用户体验而对缓存数据进行管理的方法和规则。以下是一些常见的缓存管理策略: 1. LRU(Least Recently Used,最近最少使用) 原理:当缓存满了,需要腾出空间时&…...
2025简约的打赏系统PHP网站源码
源码介绍 2025简约的打赏系统PHP网站源码 源码上传服务器,访问域名/install.php安装 支持自定义金额打赏 集成支付宝当面付 后台管理系统 订单记录查询 效果预览 源码获取 2025简约的打赏系统PHP网站源码...
交叉编译工具链下载和使用
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
BUU28 [GXYCTF2019]BabySQli1
常规万能密码,发现登不上去 过滤掉了or,,当尝试了n种方法以后,最关键的是发现()居然也被过滤了 哈哈,那玩个淡, 再搜wp!! 当输入admin的时候,提示密码错误࿰…...
ubuntu20.04+RTX4060Ti大模型环境安装
装显卡驱动 这里是重点,因为我是跑深度学习的,要用CUDA,所以必须得装官方的驱动,Ubuntu的附件驱动可能不太行. 进入官网https://www.nvidia.cn/geforce/drivers/,选择类型,最新版本下载。 挨个运行&#…...
Rust语言进阶之标准输入: stdin用法实例(一百零五)
简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…...
结构化表达(三):归纳分组
目录 归纳分组 一、如何归纳分组 二、如何掌握更多模型 归纳分组 一、如何归纳分组 整理思路,多用分类模型,列如: 1、内部、外部分类。 2、市场营销学中的4P:产品、渠道、价格、促销。 3、战略3C:公司、客户、竞…...
5G技术解析:从核心概念到关键技术
1. 引言 5G技术的迅猛发展正在重塑我们的生活方式和社会结构。它不仅仅是新一代的移动通信技术,更是一场深刻的技术革命。5G网络正在以其惊人的高速、低延迟和大带宽能力,为智能家居、自动驾驶、工业自动化、远程医疗等另一带来前所未有的可能性。 本文…...
DeepSeek 引领的 AI 范式转变与存储架构的演进
近一段时间,生成式 AI 技术经历了飞速的进步,尤其是在强推理模型(Reasoning-LLM)的推动下,AI 从大模型训练到推理应用的范式发生了剧变。以 DeepSeek 等前沿 AI 模型为例,如今的 AI 技术发展已不局限于依赖…...
基于Hexo实现一个静态的博客网站
原文首发:https://blog.liuzijian.com/post/8iu7g5e3r6y.html 目录 引言1.初始化Hexo2.整合主题Fluid3.部署评论系统Waline4.采用Nginx部署 引言 Hexo是中国台湾开发者Charlie在2012年创建的一个开源项目,旨在提供一个简单、快速且易于扩展的静态博客生…...
doris:MySQL Dump
Doris 在 0.15 之后的版本已经支持通过 mysqldump 工具导出数据或者表结构 使用示例 导出 导出 test 数据库中的 table1 表:mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases test --tables table1 导出 test 数据库中的 table1 表结构&am…...
DeepSeek-R1 云环境搭建部署流程
DeepSeek横空出世,在国际AI圈备受关注,作为个人开发者,AI的应用可以有效地提高个人开发效率。除此之外,DeepSeek的思考过程、思考能力是开放的,这对我们对结果调优有很好的帮助效果。 DeepSeek是一个基于人工智能技术…...
LabVIEW铅酸蓄电池测试系统
本文介绍了基于LabVIEW的通用飞机铅酸蓄电池测试系统的设计与实现。系统通过模块化设计,利用多点传感器采集与高效的数据处理技术,显著提高了蓄电池测试的准确性和效率。 项目背景 随着通用航空的快速发展,对飞机铅酸蓄电池的测试需求也…...
android studio无痛入门
在Android Studio中创建和管理项目主要涉及以下几个步骤: 1. 创建新项目 打开Android Studio,点击“Start a new Android Studio project”或者“File” > “New” > “New Project”。 选择一个模板,例如“Empty Activity”࿰…...
GNN多任务预测模型实现(二):将EXCEL数据转换为图数据
目录 一. 引言 二. 加载和检查数据 三. 提取特征和标签 四. 标准化特征 五. 构建节点索引 六. 构建边及其特征 七. 总结 八. 结语 一. 引言 在图神经网络(Graph Neural Networks, GNNs)的多任务学习场景中,数据预处理是至关重要的一…...
【机器学习】K-Nearest Neighbor KNN算法原理简介及要点
KNN算法用于分类 简介KNN分类算法的流程距离度量K值选择分类表决加权分类表决 简介 KNN的全称是K Nearest Neighbors. 这种算法可以被用来进行分类,原理是根据离特征点最近的K个点所属的类别进行分类。 KNN分类算法的流程 KNN算法的整体流程是我们需要将训练数据…...
ARM嵌入式学习--第十三天(I2C)
I2C --介绍 I2C(Inter-intergrated Circuit 集成电路)总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信;I2C总线有俩根双向的信号线,一根数据线SDA用于收发数据&…...
error: externally-managed-environment
当你执行 pip3 install ipykernel 时遇到 error: externally-managed-environment 错误,这是因为从 Python 3.11 开始,为了避免破坏系统级 Python 环境,引入了外部管理环境(externally - managed environment)的概念&a…...
使用PyCharm进行Django项目开发环境搭建
如果在PyCharm中创建Django项目 1. 打开PyCharm,选择新建项目 2.左侧选择Django,并设置项目名称 3.查看项目解释器初始配置 4.新建应用程序 执行以下操作之一: 转到工具| 运行manage.py任务或按CtrlAltR 在打开的manage.pystartapp控制台…...
移动机器人规划控制入门与实践:基于navigation2 学习笔记(一)
课程实践: (1)手写A*代码并且调试,总结优缺点 (2)基于Gazebo仿真,完成给定机器人在给定地图中的导航调试 (3)使用Groot设计自己的导航行为树 掌握一门技术 规划控制概述 常见移动机器人...
TCP服务器与客户端搭建
一、思维导图 二、给代码添加链表 【server.c】 #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <fcntl.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.…...
flutter Selector 使用
在 Flutter 中,Selector 是 provider 包中的一个组件,用于在状态管理中高效地选择和监听特定部分的状态变化。Selector 可以帮助你避免不必要的重建,只在你关心的数据发生变化时才重建 widget。 基本用法 Selector 的基本用法如下ÿ…...
deepseek来讲lua
Lua 是一种轻量级、高效、可嵌入的脚本语言,广泛应用于游戏开发、嵌入式系统、Web 服务器等领域。以下是 Lua 的主要特点和一些基本概念: 1. 特点 轻量级:Lua 的核心非常小,适合嵌入到其他应用程序中。高效:Lua 的执…...
【大数据技术】本机DataGrip远程连接虚拟机MySQL/Hive
本机DataGrip远程连接虚拟机MySQL/Hive datagrip-2024.3.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本机的DataGrip连接虚拟机的MySQL数据库和Hive数据库,提高编程效率。 安装DataGrip 请按照以下步骤安装DataGrip软…...
【C++篇】C++11新特性总结1
目录 1,C11的发展历史 2,列表初始化 2.1C98传统的{} 2.2,C11中的{} 2.3,C11中的std::initializer_list 3,右值引用和移动语义 3.1,左值和右值 3.2,左值引用和右值引用 3.3,…...
redis之RDB持久化过程
redis的rdb持久化过程 流程图就想表达两点: 1.主进程会fork一个子进程,子进程共享主进程内存数据(fork其实是复制页表),子进程读取数据并写到新的rdb文件,最后替换旧的rdb文件。 2.在持久化过程中主进程接收到用户写操作&#x…...
操作系统—进程与线程
补充知识 PSW程序状态字寄存器PC程序计数器:存放下一条指令的地址IR指令寄存器:存放当前正在执行的指令通用寄存器:存放其他一些必要信息 进程 进程:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位…...
CV(11)-图像分割
前言 仅记录学习过程,有问题欢迎讨论 图像分割 语义分割不需要区分具体的个体,实例分割需要 反卷积/转置卷积: 它并不是正向卷积的完全逆过程。反卷积是一种特殊的正向卷积,先按照一定的比例通过补0 来扩大输入图像的尺寸&…...
【STM32系列】利用MATLAB配合ARM-DSP库设计FIR数字滤波器(保姆级教程)
ps.源码放在最后面 设计IIR数字滤波器可以看这里:利用MATLAB配合ARM-DSP库设计IIR数字滤波器(保姆级教程) 前言 本篇文章将介绍如何利用MATLAB与STM32的ARM-DSP库相结合,简明易懂地实现FIR低通滤波器的设计与应用。文章重点不在…...
