动态路由使用

目录

添加动态路由

添加单个路由

添加多个路由

指定路由添加的位置

导航守卫添加路由

删除动态路由


添加动态路由

添加动态路由的方法有两个:addRoutes(添加多个路由)和addRoute(添加单个路由),但是addRoutes只能vue2用,并且已经过时了,所以推荐用addRoute

添加单个路由
  • getRoutes()  可以查看所有路由

  • hasRoute()   可以查看是否有某路由

<template><main><el-button @click="addRoutes">添加动态路由</el-button><el-button @click="toDemo01">跳转Demo01</el-button></main>
</template><script setup lang="ts">
import { useRouter } from 'vue-router'const r = useRouter()const addRoutes = () => {r.addRoute({path: '/demo01',name: 'demo01',component: () => import('@/views/Demo01.vue'),})// 查看所有路由console.log(r.getRoutes());// 查看是否存在某路由console.log(r.hasRoute('demo01'));
}const toDemo01 = () => {r.push('/demo01')
}
</script>

还可以添加嵌套路由

  • 有一点需要注意:路由规则配置文件里,子路由可以不写前面的父路由路径,但是动态路由里不行,必须写完整路径
<template><main><h2>Home</h2><el-button @click="addRoutes">添加动态路由</el-button><el-button @click="toDemo02">跳转Demo02</el-button></main>
</template><script setup lang="ts">
import { useRouter } from 'vue-router'const r = useRouter()const addRoutes = () => {r.addRoute({path: '/demo01',name: 'demo01',children: [{path: '/demo01/demo02', // 子路由一定要完整 只写/demo02会报错查找不到路由name: 'demo02',component: () => import('@/views/Demo02.vue'),}]})// 查看所有路由console.log(r.getRoutes());// 查看是否存在某路由console.log(r.hasRoute('demo02'));
}const toDemo02 = () => {r.push('/demo01/demo02')
}
</script>

还可以添加动态路由

<template><main><el-button @click="addRoutes">添加动态路由</el-button><el-button @click="toDemo01">跳转Demo01</el-button></main>
</template><script setup lang="ts">
import { useRouter } from 'vue-router'const r = useRouter()const addRoutes = () => {r.addRoute({path: '/demo01/:id', // 还可以添加动态路由  路由只要是  ” /demo01/任意路由 “  都可以匹配到Demo01组件name: 'demo01',component: () => import('@/views/Demo01.vue'),})// 查看所有路由console.log(r.getRoutes());// 查看是否存在某路由console.log(r.hasRoute('demo01'));
}const toDemo01 = () => {// r.push('/demo01/1')r.push('/demo01/100')
}
</script>
添加多个路由

添加多个动态路由,可以把所有路由对象组成一个数组,对数组进行遍历,然后挨个添加

<template><main><el-button @click="addRoutes">添加动态路由</el-button><el-button @click="toDemo01">跳转Demo01</el-button><el-button @click="toDemo02">跳转Demo02</el-button></main>
</template><script setup lang="ts">
import { useRouter } from 'vue-router'
import Demo01 from '@/views/Demo01.vue'
import Demo02 from '@/views/Demo02.vue'const r = useRouter()const addRoutes = () => {// 路由信息组成的数组const routeList = [{path: '/demo01',name: 'demo01',component: Demo01},{path: '/demo02',name: 'demo02',component: Demo02},]// 只能遍历挨个添加routeList.forEach((item: any) => r.addRoute(item))// 查看所有路由console.log(r.getRoutes());// 查看是否存在某路由console.log(r.hasRoute('demo01'));console.log(r.hasRoute('demo02'));
}const toDemo01 = () => {r.push('/demo01')
}const toDemo02 = () => {r.push('/demo02')
}
</script>
指定路由添加的位置
  • 也就是可以指定路由添加到那个路由下面,addRoute第一个参数指定要添加到那,第二个参数正常的写路由信息

路由配置文件

import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: '/',name: 'home',component: HomeView},{path: '/about',name: 'about',component: () => import('../views/AboutView.vue')}]
})export default router

我们希望路由添加到about路由里面,成为about的子路由

<template><main><el-button @click="addRoutes">添加动态路由</el-button><el-button @click="toDemo01">跳转Demo01</el-button></main>
</template><script setup lang="ts">
import { useRouter } from 'vue-router'const r = useRouter()const addRoutes = () => {r.addRoute('about', {path: '/about/demo01', // 这里路由一定要写完整。路由规则配置文件里,子路由可以不写前面的路由路径,但是动态路由里不行,必须写完整路径name: 'demo01',component: () => import('@/views/Demo01.vue'),})// 查看所有路由console.log(r.getRoutes());// 查看是否存在某路由console.log(r.hasRoute('demo01'));
}const toDemo01 = () => {r.push('/about/demo01')
}
</script>
导航守卫添加路由

一般做前端权限的时候用,添加后应该通过返回新的位置来触发重定向,不然地址栏输入路由不会跳转

router.beforeEach(to => {if (!hasNecessaryRoute(to)) {router.addRoute(generateRoute(to))// 触发重定向return to.fullPath}
})
  • hasNecessaryRoute(to)这个方法是避免重定向的,函数结果返回一个布尔值就行了。to参数携带了要前往路由的具体信息,如果是已经添加过的动态路由,应该返回false,避免重复添加,造成路由重定向,如果没有添加过,则应该返回true,进行动态路由的添加

举个例子,hasNecessaryRoute函数可以这样写

const hasNecessaryRoute = (to: any) => {// return router.getRoutes().some(route => route.path === to.path)// 或者下面这样return router.hasRoute(to.name)
}

前端权限思想

只是大致写了下思路,方法千奇百怪,能实现就行

1. 点击登录的时候,调用接口,后端返回此用户的路由信息,

2. 跳转路由到首页,然后触发全局前置导航守卫

3. 在全局前置导航守卫中进行动态路由的添加

删除动态路由

通过添加一个名称冲突的路由。如果添加与现有途径名称相同的途径,会先删除路由,再添加路由
 

router.addRoute({ path: '/about', name: 'about', component: About })
// 这将会删除之前已经添加的路由,因为他们具有相同的名字且名字必须是唯一的
router.addRoute({ path: '/other', name: 'about', component: Other })

通过使用 router.removeRoute() 按名称删除路由

router.addRoute({ path: '/about', name: 'about', component: About })
// 删除路由
router.removeRoute('about')

注意:当路由被删除时,所有的别名和子路由也会被同时删除

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

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

相关文章

ASO 对App产品性能的影响

可发现性 拥有出色的App还不足以让人们发现它&#xff0c;ASO技术通过提高搜索排名来增强App的可发现性。当用户可以在搜索结果中轻松找到应用程序时&#xff0c;那么下载和成功的潜力就会飙升。 设定期望 实施有效的应用商店优化不仅可以为潜在用户建立正确的期望&#xf…

东方通 | 基于TongWeb中间件适配改造实战

东方通 一、东方通[Tong Web] 简介 ​为了方便地开发、部署、运行和管理Internet上基于三层/多层结构的应用&#xff0c;需要以基于组件的底层技术为基础&#xff0c;规划一个整体的应用框架&#xff0c;提供相应的支撑平台&#xff0c;作为Internet应用的基础设施&#xff0…

每日一类:Qt GUI开发的基石《QWidget》

深入探索QWidget&#xff1a;Qt GUI开发的基石 在Qt框架中&#xff0c;QWidget类扮演着构建图形用户界面&#xff08;GUI&#xff09;的基础角色。它不仅提供了窗口的基本功能&#xff0c;还允许开发者通过继承和定制来创建各式各样的用户界面元素。本文将详细介绍QWidget的关…

白酒:传统酿造工艺与现代科技相结合的创新实践

在云仓酒庄豪迈白酒的生产过程中&#xff0c;传统酿造工艺与现代科技的结合是推动产业发展的重要动力。云仓酒庄作为一家注重创新与实践的酒庄&#xff0c;在这方面进行了许多有益的探索和尝试。 首先&#xff0c;传统酿造工艺是云仓酒庄豪迈白酒的灵魂。在长期的生产实践中&am…

抽丝剥茧!API在互联网金融领域里大显身手:深度解锁三大创新应用场景

&#x1f680; 引言 有这么一位幕后高手&#xff0c;它不显山露水却能牵动整个互联网金融江湖的脉搏&#xff0c;它在无形中编织数据网络&#xff0c;如同枢纽般连通各方资源&#xff0c;在静默中推动创新进程&#xff0c;这就是大名鼎鼎的API&#xff08;应用程序接口&#x…

基于ssm学生学籍管理系统设计与实现+vue论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

C语言:指针(二)

目录 1.数组名的理解2.使用指针访问数组3.一维数组传参的本质4.二级指针5.指针数组6.字符指针变量7.数组指针变量8.二维数组传参的本质9.函数指针变量10.函数指针数组11.回调函数12.qsort函数13.使用回调函数模拟实现qsort函数 1.数组名的理解 int main() {int arr[] { 1,2,3…

VBA将当前打开的表格生成PDF图片

前言 VBA将当前的表格存储成PDF文件进行存储 代码 Sub ExportToPDF()Dim FilePath As StringDim FileName As StringDim ExportRange As Range 设置导出文件路径及名称FilePath "D:\Users\"FileName "ExportedPDF" 设置导出区域范围Set ExportRange Ra…

Unity(第十八部)物理力学,碰撞,触发、关节和材质

1、重力 刚体组件 英文中文描述RigidBody刚体组件physics->rigidbody &#xff0c;刚体组件使一个物体有了质量&#xff0c;重力等。&#xff0c;use gravity 勾选后&#xff0c;物体才会受到重力&#xff0c;会自动下落&#xff0c;取消勾选就不会。&#xff0c;&#xf…

RTCA DO-178C 机载系统和设备认证中的软件注意事项 - 目录

本文为DO-178C标准目录&#xff0c;可点击以下对应章节直接跳转至具体内容。 1.0 介绍 INTRODUCTION 2.0 软件开发的系统相关性 SYSTEM ASPECTS RELATING TO SOFTWARE DEVELOPMENT 3.0 软件生命周期 SOFTWARE LIFE CYCLE 4.0 软件计划过程 SOFTWARE PLANNING PROCESS 5.0 …

selenuim[1]($x(‘xpath语法’)、WebDriverWait())

文章目录 初学selenuim记录1、执行driver webdriver.Chrome()后很久才打开浏览器2、浏览器多元素定位 $x(‘xpath语法’)3、打开浏览器driver.get("网址")执行了很久才开始定位元素&#xff1a;等待&#xff08;1&#xff09;driver.set_page_load_timeout(t)&#…

超越CPU和GPU:引领AI进化的LPU

什么是CPU CPU&#xff08;Central Processing Unit&#xff09;是由数十亿个晶体管构成的&#xff0c;可以拥有多个处理核心&#xff0c;通常被称为计算机的“大脑”。它对所有现代计算系统至关重要&#xff0c;因为它执行计算机和操作系统所需的命令和进程。CPU在决定程序运…

【Linux C | 网络编程】gethostbyaddr 函数详解及C语言例子

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

JavaSE面试——hashcode和equals

对象调用 hashCode 方法后&#xff0c;会返回一串 int 类型的数字码 java 规定&#xff1a; 1. 两个对象的 hashCode() 相等&#xff0c;那他们的 equals() 不一定相等 2. 两个对象的 equals() 相等&#xff0c;那他们的 hashCode() 必定相等 3. 重写 equals() 方法时一定要…

三天学会阿里分布式事务框架Seata-SpringCloud Alibaba分布式基础案例搭建

锋哥原创的分布式事务框架Seata视频教程&#xff1a; 实战阿里分布式事务框架Seata视频教程&#xff08;无废话&#xff0c;通俗易懂版&#xff09;_哔哩哔哩_bilibili实战阿里分布式事务框架Seata视频教程&#xff08;无废话&#xff0c;通俗易懂版&#xff09;共计10条视频&…

日志到filebeat-->logstash-->elastic-->kibana

1、日志到filebeat。 cat /etc/filebeat/filebeat.yml filebeat.inputs: - type: syslog format: rfc3164 protocol.udp: host: "0.0.0.0:514" output.logstash: hosts: ["localhost:5044"] 验证方式: tcpdump -i 网卡名称 udp port 514 2、…

NLog条件配置——实现将包含某个特定字符串日志写入指定文件

需求产生缘由 在开发中为了了解程序在运行的内存状态并记录下来&#xff0c;以便出问题时判断是不是与内存相关。于是实时采集了开发程序需要的内存信息。但采集的内存信息在存储时&#xff0c;以NLog中的Trace级别来存储的话&#xff0c;会与程序其它Trace级别的日志都记录在…

瑞吉苍穹外卖如何拓展?已经经过不同公司多轮面试。项目中会问到哪些问题?以及问题如何解决?

别催了&#xff0c;别催了&#xff0c;先收藏吧。 作者大大正在加班加点完成。 文章会尽快发布&#xff0c;关注收藏&#xff0c;尽请期待。 想要加入并查阅作者的知识库可以联系作者 不要白嫖&#xff0c;通过后&#xff0c;附上关注和收藏截图。 已有众多小伙伴加入 目前…

QtCreator报Failed to parse qmlimportscanner output解决

错误如下: 定位错误位置 增加错误信息打印 打印执行命令 执行打印输出的命令,成功返回JSON 但输出的JSON对象不是json格式,而是命令 增加$$成功输出JSON 使用QtCreator12编译一次后,再使用QtCreator13成功编译通过,问题解决

初学者如何使用QT新建一个包含UI界面的C++项目

文章目录 一、下载并安装QT51、下载安装包2、注册/登录账号3、安装qt6 二、新建QT Widget项目1、新建项目并且运行2、易错点&#xff1a;可能运行成功得到UI界面但是会报错&#xff08;原因是使用了中文路径&#xff09; 一、下载并安装QT5 1、下载安装包 进入下载网址 Windo…