问题描述:在做使用vue-router动态添加路由的方法,addRouter添加,使用

console.log(this.$router.options.routes)

打印对象,发现添加成功,但是一直提示:Duplicate named routes definition
错误原因:路由中有重复的名称。

添加路由的方法,代码如下:

function createRouter(arr){
let subRoutes=[];
arr.forEach((item)=>{
if (config.componentList.get(item.pathname) == "") {
subRoutes.push({
path: item.menuUrl,
name: item.pathname,
meta: {requireAuth: true,menuId:item.menuId}
})
} else {
let component = config.componentList.get(item.pathname);
subRoutes.push({
path: item.menuUrl,
name: item.pathname,
meta: {requireAuth: true,menuId:item.menuId},
component: resolve => require(["@/components/" + component + ""], resolve)
})
}
});
return subRoutes;
}
// 执行动态添加路由
function DynamicAddRouter(){
let subRoutes=[];
subRoutes = createRouter(store.getters.getMenuInfo);
store.getters.getMenuInfo.forEach((item)=>{
if(item.menuChilds.length && item.menuChilds.length>0){
subRoutes.push(...createRouter(item.menuChilds));
}
});
router.options.routes[0].children=[...subRoutes];
router.options.routes.push(
{
path:'*',
name:"404",
component: (resolve)=> require(['@/components/Page404'],resolve)
});
console.log(router.options.routes);
router.addRoutes(router.options.routes);
}

解决方法:自己定义一个$addRoutes的方法,在router/index.js下
代码如下:

router.$addRoutes = (params) => {
router.matcher = new Router({mode: 'history'}).matcher;
router.addRoutes(params)
}

然后在动态添加路由时,使用自定义的方法

router.$addRoutes(router.options.routes);

解析:

addRoutes 方法仅仅是帮你注入新的路由,并没有帮你剔除其它路由!

设想存在这么一种情况:用户在自己电脑上登录了管理员账号,这个时候会向路由中注入管理员的路由,然后再退出登录,保持页面不刷新,改用普通用户账号进行登录,这个时候又会向路由中注入普通用户的路由,那么,在路由中将存在两种用户类型的路由,即使用户不感知,通过改变 url,普通用户也可以访问管理员的页面!

对于这个问题,也有一个解决办法

通过新建一个全新的 Router,然后将新的 Router.matcher 赋给当前页面的管理 Router,以达到更新路由配置的目的。自定义的$addRoutes,就是实现这个功能
参考 :https://blog.csdn.net/suolong914/article/details/89432563

原文链接:vue-router动态添加路由的方法,addRouter添加路由,提示:Duplicate named routes definition

[转]vue-router动态添加路由的方法,addRouter添加路由,提示:Duplicate named routes definition的更多相关文章

  1. vue动态添加路由,跳转页面时,页面报错路由重复:vue-router.esm.js?8c4f:16 [vue-router] Duplicate named routes definition: { name: "Login", path: "/login" }

    之前用了一个vue-element-admin做了一个小项目,里面用到了动态添加路由,动态展示侧边栏, 当我切换页面时,控制台总是警告提示路由重复,连续跳转几次页面后,控制台就被这些警告占满了, 于是 ...

  2. vue 之bug<1> Warn : [vue-router] Duplicate named routes definition:

    原因:定义重复的路由名称. 我有3个不同的(父级)vue文件分别配置了3个相同的(子级)vue文件,配置路由的js文件里子集路由的name重复了. 解决方案: 一天一个小Bug

  3. vue router动态路由

    <div id="#app"> <router-link to="/user/header">路由1</router-link&g ...

  4. Vue.js路由管理器 Vue Router

    起步 HTML <script src="https://unpkg.com/vue/dist/vue.js"></script> <script s ...

  5. [Vue 牛刀小试]:第十三章 - Vue Router 基础使用再探(命名路由、命名视图、路由传参)

    一.前言 在上一章的学习中,我们简单介绍了前端路由的概念,以及如何在 Vue 中通过使用 Vue Router 来实现我们的前端路由.但是在实际使用中,我们经常会遇到路由传参.或者一个页面是由多个组件 ...

  6. [Vue 牛刀小试]:第十四章 - 编程式导航与实现组件与 Vue Router 之间的解耦

    一.前言 在上一章的学习中,通过举例说明,我们了解了 Vue Router 中命名路由.命名视图的使用方法,以及如何通过 query 查询参数传参,或者是采用 param 传参的方式实现路由间的参数传 ...

  7. Vue躬行记(8)——Vue Router

    虽然Vue.js未提供路由功能,但是官方推出了Vue Router(即vue-router库),以插件的形式支持.它与Vue.js深度集成,可快速的创建单页应用(Single Page Applica ...

  8. [Vue 牛刀小试]:第十二章 - 使用 Vue Router 实现 Vue 中的前端路由控制

    一.前言 前端路由是什么?如果你之前从事的是后端的工作,或者虽然有接触前端,但是并没有使用到单页面应用的话,这个概念对你来说还是会很陌生的.那么,为什么会在单页面应用中存在这么一个概念,以及,前端路由 ...

  9. Vue 实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案

    Vue实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案   by:授客 QQ:1033553122   开发环境   Win 10   Vue 2.9.6   node-v ...

  10. Vue Router 路由实现原理

    一.概念 通过改变 URL,在不重新请求页面的情况下,更新页面视图. 二.实现方式 更新视图但不重新请求页面,是前端路由原理的核心之一,目前在浏览器环境中这一功能的实现主要有2种方式: 1.Hash  ...

随机推荐

  1. PostgreSQL 17重磅登场——世界上最成功的数据库

    朋友们,万众期待的 PostgreSQL 大版本发布又来了!这一次,PostgreSQL 17 带着全新的性能优化和开发者必备的新功能强势登场.与其说这是一场普通的更新,不如说它是一场专为高并发工作负 ...

  2. vue 强制刷新

    页面传的数值动态改变,接口接受的参数也就动态更改,但接收的数据有时候不会及时改变,通过this.$forceUpdate()页面强制刷新来解决这个问题.

  3. NDT论文翻译

    The Normal Distributions Transform: A New Approach to Laser Scan Matching 正态分布变换:激光扫描匹配的新方法 摘要:匹配 2D ...

  4. Kubernetes上安装nacos

    k8s配置 --- apiVersion: apps/v1 kind: Deployment metadata: name: nacos namespace: com spec: selector: ...

  5. UniswapV2Pair细节

    UniswapV2Pair合约是Uniswap V2协议中的核心部分,用于管理流动性池.代币交换.流动性代币的铸造和销毁等操作.以下是对UniswapV2Pair合约中所有主要方法及其参数的详细讲解. ...

  6. Trie树练习题

    Trie树练习题 T1 「一本通 2.3 例 2」The XOR Largest Pair 在给定的 \(N\) 个整数\(A_1,A_2,...A_N\)中选出两个进行异或运算,得到的结果最大是多少 ...

  7. WiFi基础(七):WiFi漫游与WiFi组网

    liwen01 2024.10.27 前言 无线 WiFi 的优点是方便.灵活,可以接入各种设备.缺点就是信号容易被干扰.信号覆盖范围有限.下面几个问题应该很多人都有遇到过: 为何很多洗手间的 WiF ...

  8. mysql隐蔽的索引规则导致数据全表扫描

    索引是为了加速数据的检索,但是不合理的表结构或适应不当则会起到反作用.我们在项目中就遇到过类似的问题,两个十万级别的数据表,在做连接查询的时候,查询时间达到了7000多秒还没有查出结果. 首先说明,关 ...

  9. 2.7 使用LiveCD从光盘直接运行Linux,无需安装

    Linux 世界中一个相对较新的现象是可引导的 Linux CD 发行版的出现.它无需安装就可以看到 Linux 系统是什么样的. 多数现代 PC 都能从 CD 启动,而不是必须从标准硬盘启动.基于这 ...

  10. 新手入门Java自动化测试的利器:Selenium WebDriver

    今天我们将深入探讨一款强大的Java自动化测试工具--Selenium WebDriver.在正式介绍Selenium WebDriver之前,让我们首先对Selenium本身进行简要概述,以便更好地 ...