vue 路由警告 Duplicate named routes definition
今天在开发的时候,项目报了一个警告 Duplicate named routes definition ,这里记录一下解决方式和思路。

警告产生的原因
根据提示内容,我们大概猜测是和路由的name有关,上网了解了一下,验证了我们的猜测是正确的。警告是由于路由的name 重复导致的。(原理?who care (艹皿艹 ))
错误类型
虽然我们已经知道警告是由于name重复导致,其实细分一下还是有点不一样的。
一是静态路由中的name重复,一是动态路由的name 重复
举例说明
静态路由:
错误demo:
{
path: '/storage-pool',
name: 'storagePool', // name 1
component: Layout,
children: [
{
path: 'drag-table',
name: 'DragTable', // name 2
meta: { title:'' },
component: () => import('@/views/storage-pool/storage-pool/index')
}
]
},
{
path: '/pool',
name: 'storagePool', // name 3
component: Layout,
children: [
{
path: 'drag-table',
name: 'DragTable2', // name 4
meta: { title: ''},
component: () => import('@/views/storage-pool/storage-pool/index')
}
]
},
以上demo 包括子路由一共有4个name值,其中name1 和name3 是重复的。这样就会产生Duplicate named routes definition 的警告了。
解决方式:
静态路由的解决方式很简单,只要调整一下name,使所有name 不重复即可.
例如,将以上的name 分别设置为name : 'storagePool' , name: 'DragTable', name: 'storagePool2', name: 'DragTable2'
动态路由:
这里重点要说的是动态路由。动态路由一般来说是通过后端接口返回拿到数据,然后在路由守卫router.beforeEach 中进行添加。
错误Demo:
router.beforeEach(async(to, from, next) => {
if (to.name === 'storageNew') {
getAside().then(res => {
router.options.routes = res
router.addRoutes(router.options.routes)
next()
})
} else {
next()
}
})
以上demo 运行也会出现警告 Duplicate named routes definition,这里的重点是方法 addRoutes,因为: addRoutes 方法仅仅是帮你注入新的路由,并没有帮你剔除其它路由。
解决方式:
这里我们使用addRoutes之前,将新的路由记录传递给matcher。即:router.matcher = new Router().matcher
放在一起就是
。。。
router.options.routes = res
router.matcher = new Router().matcher //match
router.addRoutes(router.options.routes)
刷新页面会发现警告已经消失了。
但是,页面初始化的警告消失了,在点击动态路由的时候会发现,还是会出现警告。检查一下代码发现,我们每次页面跳转的时候,在router.beforeEach 里都会请求一次地址getAside ,重新使用方法addRoutes。
那么让请求只执行一次,会不会就解决问题了尼?
这里我使用了localStorage,页面初始化设置localStorage 为0,在第一次请求拿到动态地址之后存储一下状态为1,之后由于是单页面不会刷新页面,那么只要在beforeEach添加判断就可以了。
完整代码:
window.localStorage.setItem('storageAside', '0')
router.beforeEach(async(to, from, next) => {
if (to.name === 'storageNew' && window.localStorage.getItem('storageAside') === '0') {
getAside().then(res => {
window.localStorage.setItem('storageAside', '1')
router.options.routes = res
router.matcher = new Router().matcher
router.addRoutes(router.options.routes)
next()
})
} else {
next()
}
})
————————————————
版权声明:本文为CSDN博主「白日有梦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:vue 路由警告 Duplicate named routes definition
以上demo 包括子路由一共有4个name值,其中name1 和name3 是重复的。这样就会产生Duplicate named routes definition 的警告了。
解决方式:静态路由的解决方式很简单,只要调整一下name,使所有name 不重复即可.
例如,将以上的name 分别设置为name : 'storagePool' , name: 'DragTable', name: 'storagePool2', name: 'DragTable2'
动态路由:这里重点要说的是动态路由。动态路由一般来说是通过后端接口返回拿到数据,然后在路由守卫router.beforeEach 中进行添加。
错误Demo:————————————————版权声明:本文为CSDN博主「白日有梦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_37026254/article/details/115954342
vue 路由警告 Duplicate named routes definition的更多相关文章
- vue动态添加路由,跳转页面时,页面报错路由重复:vue-router.esm.js?8c4f:16 [vue-router] Duplicate named routes definition: { name: "Login", path: "/login" }
之前用了一个vue-element-admin做了一个小项目,里面用到了动态添加路由,动态展示侧边栏, 当我切换页面时,控制台总是警告提示路由重复,连续跳转几次页面后,控制台就被这些警告占满了, 于是 ...
- vue 之bug<1> Warn : [vue-router] Duplicate named routes definition:
原因:定义重复的路由名称. 我有3个不同的(父级)vue文件分别配置了3个相同的(子级)vue文件,配置路由的js文件里子集路由的name重复了. 解决方案: 一天一个小Bug
- Vue路由Hash模式分析
Vue路由Hash模式分析 Vue-router是Vue的核心组件,主要是作为Vue的路由管理器,Vue-router默认hash模式,即使用URL的Hash来模拟一个完整的URL,当URL改变时页面 ...
- Vue路由History模式分析
Vue路由History模式分析 Vue-router是Vue的核心组件,主要是作为Vue的路由管理器,Vue-router默认hash模式,通过引入Vue-router对象模块时配置mode属性可以 ...
- 初印象至Vue路由
初印象系列为快速了解一门技术的内容,后续会推出本人应用这门技术时发现的一些认识. Vue路由和传统路由的区别: Vue路由主要是用来实现单页面应用内各个组件之间的切换,同样支持传递参数等功能.而传统路 ...
- Vue.js—组件快速入门及Vue路由实例应用
上次我们学习了Vue.js的基础,并且通过综合的小实例进一步的熟悉了Vue.js的基础应用.今天我们就继续讲讲Vue.js的组件,更加深入的了解Vue,js的使用.首先我们先了解一下什么是Vue.js ...
- vue 通过 name 和 params 进行调整页面传参刷新参数丢失问题&vue路由可选参数
vue 通过 name 和 params 进行调整页面传参刷新参数丢失问题 router.js: export default new Router({ routes: [ { path: '/', ...
- Vue路由vue-router
前面的话 在Web开发中,路由是指根据URL分配到对应的处理程序.对于大多数单页面应用,都推荐使用官方支持的vue-router.Vue-router通过管理URL,实现URL和组件的对应,以及通过U ...
- 攻克vue路由
先下手 路由是个好功能,但是每次都感觉没法开始下手,愣愣的看半天官方文档,所以做个快速开始教程. 首先先搭好HTML文件结构: <!--link和view在一个父元素下--> <di ...
- vue路由
vue-router 现在的应用都流行SPA应用(single page application) 传统的项目大多使用多页面结构,需要切换内容的时候我们往往会进行单个html文件的跳转,这个时候受网络 ...
随机推荐
- C#/.NET/.NET Core学习路线集合,学习不迷路!
前言 C#..NET..NET Core.WPF.WinForm.Unity等相关技术的学习.工作路线集合(持续更新)!!! 全面的C#/.NET/.NET Core学习.工作.面试指南:https: ...
- 一文彻底弄懂MySQL的MVCC多版本控制器
InnoDB 的 MVCC(Multi-Version Concurrency Control,多版本并发控制) 是 MySQL 实现高并发事务处理的一种机制.通过 MVCC,InnoDB 可以在高并 ...
- Special relativity
狭义相对论的理解,需要四维时空的想象! 6.14 狭义相对论,与麦克斯韦方程组有紧密的联系. 爱因斯坦对于牛顿的时空观的颠覆,与奥地利的一位著名的物理学家有关,马赫. 年轻的爱因斯坦在专利局闲暇之余爱 ...
- linux环境安装pip
1.下载pip安装包 https://files.pythonhosted.org/packages/ce/ea/9b445176a65ae4ba22dce1d93e4b5fe182f953df71a ...
- ESP8266+ MQTT+SG90(舵机) platformio
ESP8266 + MQTT + SG90(舵机) platformio 连线 ESP8266 MG90S(舵机) GND 棕色 VCC 红色 模拟引脚 橙色 源代码 https://gitee.co ...
- 开源 PHP 商城项目 CRMEB 安装和使用教程
说到电商系统,很多人第一反应可能是 Shopify 或 Magento.没错,这些平台确实功能强大,但是...它们也太强大了,不仅复杂还昂贵,对于刚起步的创业者来说简直是压力山大. 但是从零开始开发一 ...
- composer 基础操作
一.composer入门 1.每次安装新的包文件,会更新/vendor/autoload.php文件 2.composer.lock与composer.json的关系 文件composer.lock会 ...
- Context的典型使用场景
获取应用文件路径 基类Context提供了获取应用文件路径的能力,ApplicationContext.AbilityStageContext.UIAbilityContext和ExtensionCo ...
- 关于C++当中全局变量的释放问题
一.由来 主要是在修改公司的一个MFC项目的时候遇到的问题,我在MFC页面的析构函数当中对一个全局图像变量进行了释放,具体如下: ai_engine_OCR::~ai_engine_OCR() { / ...
- windows当中C++版本的Opencv安装(动态库+静态库)
主要参考2篇博客,其实就是dll文件和lib文件的使用方法而已.链接如下: 1.静态库opencv配置 2.动态库opencv安装