解决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 相关文章推荐
Jquery在IE7下无法使用 $.ajax解决方法
Nov 11 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
Mar 31 Javascript
JS实现关闭当前页而不弹出提示框的方法
Jun 22 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
Jul 28 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
Dec 07 Javascript
bootstrap配合Masonry插件实现瀑布式布局
Jan 18 Javascript
javascript将json格式数组下载为excel表格的方法
Dec 22 Javascript
webpack v4 从dev到prd的方法
Apr 02 Javascript
vue裁切预览组件功能的实现步骤
May 04 Javascript
利用es6 new.target来对模拟抽象类的方法
May 10 Javascript
JS+css3实现幻灯片轮播图
Aug 14 Javascript
浅谈JavaScript 声明提升
Sep 14 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接口中interface存在的意义
2013/06/27 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
2017/05/02 PHP
javascript事件问题
2009/09/05 Javascript
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
python实时分析日志的一个小脚本分享
2017/05/07 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
使用C++扩展Python的功能详解
2018/01/12 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
python numpy 按行归一化的实例
2019/01/21 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
python3 re返回形式总结
2020/11/20 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
五一劳动节活动记录
2014/03/23 职场文书
教师师德演讲稿
2014/05/06 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
学生保证书
2015/01/16 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
大学生创业,为什么都会选择快餐饮?
2019/08/08 职场文书
ORACLE查看当前账号的相关信息
2021/06/18 Oracle
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis
MongoDB数据库之添删改查
2022/04/26 MongoDB