vue+router解决路由重复警告:[vue-router] Duplicate named routes definition

Posted 栀妹儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue+router解决路由重复警告:[vue-router] Duplicate named routes definition相关的知识,希望对你有一定的参考价值。

vue页面动态添加路由,但加载页面会报警告:

[vue-router] Duplicate named routes definition:  name: "xxx", path: "xxx" 

这个问题解释为:路由命名重复

网上有一些大神剔除原有路由的做法:
1、古墩古墩
2、白日有梦

但写在permission和router里我总有新错误 加上我不太会写路由的全局函数orz
所以提供一个我的解决思路:
1、你先看下报错里都有哪些页面(比如我上面的pic
2、再看下自己得到的路由数据是什么样的(在注入路由函数里添加console
3、把重复名称项的name改成 ‘ ’


在注入路由之前进行名称改造:

let acc = accessRoutes;
// 循环第一层 
for (let i = 0; i < acc.length; i++)  
  let element = acc[i];
  // 如果第二层有children 
  if (element.children && element.children.length>0) 
    // 就循环第二层
    for (let j = 0; j < element.children.length; j++) 
      let item = element.children[j];
      // 把警告里的name全列举上
      if (
        item.name == 'CourseCenter'||
        item.name == 'Troops'||
        item.name == 'Organizational'||
        item.name == 'Equipment'||
        item.name == 'Task'||
        item.name == 'Material'||
        item.name == 'Expert'||
        item.name == 'PlanManagement'||
        item.name == 'AddressList'||
        item.name == 'Info'||
        item.name == 'Filter'||
        item.name == 'CompanyMessage'||
        item.name == 'Consult'||
        item.name == 'Risk'
      ) 
        // 改造这个name(relax!改name不会有任何冲突)
        acc[i].children[j].name='';
      
    
  

位置总览:

再看控制台,真的没有警告啦~

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

 

 

之前用了一个vue-element-admin做了一个小项目,里面用到了动态添加路由,动态展示侧边栏,

当我切换页面时,控制台总是警告提示路由重复,连续跳转几次页面后,控制台就被这些警告占满了,

 

 

于是处理一下

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

我们先看一下原来代码

路由拦截器中的代码:

permission.js:

复制代码
if (roles) {
        function asyncFun(){
          return new Promise(function(resolve){
              store.dispatch(\'permission/GenerateRoutes\', { roles }).then(() => { // 生成可访问的路由表
                router.addRoutes(store.getters.routers); // 动态添加可访问路由表
                router.options.routes=store.getters.routers;
              });
              resolve();
          })
        }
        asyncFun().then(()=>{
          next();
        });
      }
复制代码

上面 调用的addRoutes()方法是router自带的原生方法,是动态添加路由的,它并没有删除之前路由中原有的路由!!

我们需要在动态添加路由时,清空一下之前的路由,就可以防止报这个错误

我们需要添加一个自定义方法,来清空之前的路由,因为这个permission.js中用的router是从router.js中引用进来的,所以要在router.js中增加这个自定义方法:

router.js中增加如下方法:

router.selfaddRoutes = function (params){
  router.matcher = new Router().matcher;
  router.addRoutes(params)
}

因为router.js最后导出的是router对象。所以我们只需要在这个router对象里加上这个方法即可

 

之后将permission.js中的router.addRoutes替换成router.selfaddRoutes即可

转载https://www.cnblogs.com/fqh123/p/11571688.html

以上是关于vue+router解决路由重复警告:[vue-router] Duplicate named routes definition的主要内容,如果未能解决你的问题,请参考以下文章

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

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

vuerouter-7._路由高亮

Vue router / Element 重复点击导航路由报错解决方法

Vue router / Element 重复点击导航路由报错解决方法

Vue router / element 项目重复点击路由报错