解决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 相关文章推荐
关于document.cookie的使用javascript
Apr 11 Javascript
javascript脚本编程解决考试分数统计问题
Oct 18 Javascript
jQuery实现下拉框选择图片功能实例
Aug 08 Javascript
JavaScript箭头函数_动力节点Java学院整理
Jun 28 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
Jan 15 Javascript
对angularJs中ng-style动态改变样式的实例讲解
Sep 30 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
Sep 02 Javascript
你不可不知的Vue.js列表渲染详解
Oct 01 Javascript
vue输入节流,避免实时请求接口的实例代码
Oct 30 Javascript
基于js实现逐步显示文字输出代码实例
Apr 02 Javascript
Vue的Options用法说明
Aug 14 Javascript
vue el-upload上传文件的示例代码
Dec 21 Vue.js
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学习笔记 数组遍历实现代码
2011/06/09 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
js 日期转换成中文格式的函数
2009/07/07 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
浅谈JS继承_借用构造函数 & 组合式继承
2016/08/16 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
Python ZipFile模块详解
2013/11/01 Python
Python缩进和冒号详解
2016/06/01 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
python and or用法详解
2019/06/26 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
采购员的工作职责
2013/12/26 职场文书
全神贯注教学反思
2014/02/03 职场文书
生日祝酒词大全
2015/08/10 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python