解决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脚本实现Web页面信息交互
Dec 21 Javascript
关于jquery中全局函数each使用介绍
Dec 10 Javascript
在js文件中写el表达式取不到值的原因及解决方法
Dec 23 Javascript
jQuery 取值、赋值的基本方法整理
Mar 31 Javascript
JS实现的生成随机数的4个函数分享
Feb 11 Javascript
javascript模拟C#格式化字符串
Aug 26 Javascript
jquery实现可旋转可拖拽的文字效果代码
Jan 27 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
Apr 20 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
Oct 29 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
Oct 31 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
Jan 12 Javascript
js实现淘宝浏览商品放大镜功能
Oct 28 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 循环列出目录内容的函数代码
2010/05/26 PHP
php自定义hash函数实例
2015/05/05 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
javascript回车完美实现tab切换功能
2014/03/13 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
JS实现移动端在线签协议功能
2019/08/22 Javascript
python如何统计序列中元素
2020/07/31 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
解决python对齐错误的方法
2020/07/16 Python
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
销售高级职员求职信
2013/10/29 职场文书
2014全国两会大学生学习心得体会
2014/03/10 职场文书
自我鉴定书
2014/03/24 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
担保书格式
2015/01/20 职场文书
泰山导游词
2015/02/02 职场文书
布达拉宫导游词
2015/02/02 职场文书
荆州古城导游词
2015/02/06 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
电影红河谷观后感
2015/06/11 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python