解决vue addRoutes不生效问题


Posted in Javascript onAugust 04, 2020

动态添加导航栏时,addRoutes不生效解觉

1、在addroutes前,使用router.options.routes=XXXXX的方法手动添加

2、使用作者的方法,在store里维护一个routes对象,然后使用这个对象遍历生成侧面导航栏

解决vue addRoutes不生效问题

补充知识:vue-router 动态添加路由 router.addRoutes(routes)遇到的二次登陆路由冲突问题解决

起因

在当前项目中使用的iview-admin,路由要根据权限动态生成,是在登录后获取当前用户权限内的路由使用 vue-router 的 addRoutes() 方法动态添加到路由表中

遇到的问题

项目目录

...
router
index.js // 路由主配置,路由守卫等
routers.js // 存放页面整体布局和无需权限的路由
store
modules
app.js // 项目通用vuex状态、mutation action等模块
user.js // 用户模块的
index.js // vuex  store的主入口

在router/index.js

import Vue from 'vue'
import Router from 'vue-router'
import routers from './routers' // 导出了路由配置数组项
Vue.use(Router)
const router = new Router({
routers,
mode: 'history'
})
export default router

store/modules/app.js

import router from '@/router' // @ 是src目录, 拿到路由对象
....
router.addRoutes(routes) // routes 为登录后后台接口返回的动态路由
```

此时,如上配置动态路由已经配置完成, 项目也能跑起来,控制台也不会报错和警告,感觉everything is so perfect. 但是在退出登录后,重新登录,打开控制台, 满满的黄色警告 如图

解决vue addRoutes不生效问题

意思就是路由发生了冲突, 这是因为addRoutes 给路由表中添加路由,当退出登录的时候vue实例并木有重新初始化,但是却重新又addRoutes了一次,如果登录的用户相同或者不同用户有同样的权限路由, 那么就会被直接在原来路由表基础上添加,那么自然就会发生路由冲突了,而此时如果刷新页面,vue实例重新初始化就没有这些警告,

问题来了

vue-router 只提供了addRoutes方法 却并没有提供 removeRoutes方法,那么该如何解决这个冲突呢?

解决方式

经过一番搜索与实践,找到了一种方式 , 重置router的matcher

首先修改router/idnex.js

// 原来的
const router = new Router({
routes,
mode: 'history'
})
export router
// 修改为
export const createRouter = (routers) => new Router({
routers,
mode: 'history'
})
const router = createRouter(routers)
export router

其次修改store/modules/app.js

// 原来的
import router from '@/router'
....
router.addRoutes(routes) // routes 为登录后后台接口返回的动态路由
// 修改为
import router, { createRouter } from '@/router'
import routers from '@/router/routers' // 无需配置的那些路由
...
router.matcher = createRouter(routers).matcher
router.addRoutes(routes) // routes 为登录后后台接口返回的动态路由, 在更新菜单menuList前调用
```

如此按照以上的方式即可解决这个问题

以上这篇解决vue addRoutes不生效问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript闭包的理解和实例
Aug 12 Javascript
基于jquery可配置循环左右滚动例子
Sep 09 Javascript
Javascript面向对象编程
Mar 18 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
May 28 Javascript
JavaScript用select实现日期控件
Jul 17 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
May 30 Javascript
JS html时钟制作代码分享
Mar 03 Javascript
前端开发之CSS原理详解
Mar 11 Javascript
基于vue实现swipe分页组件实例
May 25 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
Jul 17 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
Mar 01 Javascript
JS中min函数实例讲解
Feb 18 Javascript
vue 解决addRoutes多次添加路由重复的操作
Aug 04 #Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
Aug 04 #Javascript
Jquery cookie插件实现原理代码解析
Aug 04 #jQuery
解决vue自定义指令导致的内存泄漏问题
Aug 04 #Javascript
vue中的v-model原理,与组件自定义v-model详解
Aug 04 #Javascript
详解JS深拷贝与浅拷贝
Aug 04 #Javascript
vue addRoutes路由动态加载操作
Aug 04 #Javascript
You might like
PHP IPV6正则表达式验证代码
2010/02/16 PHP
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
vue拖拽组件使用方法详解
2018/12/01 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
js实现随机点名
2021/01/19 Javascript
python列表操作实例
2015/01/14 Python
python映射列表实例分析
2015/01/26 Python
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
玩具公司的创业计划书
2013/12/31 职场文书
给老婆的婚前保证书
2014/02/01 职场文书
实习单位评语
2014/04/26 职场文书
同意转租证明
2015/06/24 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
python数字转对应中文的方法总结
2021/08/02 Python
Go语言怎么使用变长参数函数
2022/07/15 Golang