解决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的气泡提示效果
May 31 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
May 05 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
Aug 14 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
May 11 Javascript
使用jQuery实现验证上传图片的格式与大小
Dec 03 Javascript
JS实现简单的键盘打字的效果
Apr 24 Javascript
js日期范围初始化得到前一个月日期的方法
May 05 Javascript
解决低版本的浏览器不支持es6的import问题
Mar 09 Javascript
策略模式实现 Vue 动态表单验证的方法
Sep 16 Javascript
vue.js实现二级菜单效果
Oct 19 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
Jul 27 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
Sep 24 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下判断网址是否有效的代码
2011/10/08 PHP
PHP 魔术变量和魔术函数详解
2015/02/25 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
yii框架无限极分类的实现方法
2017/04/08 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
2019/03/14 PHP
jquery实现聚光灯效果的方法
2015/02/06 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
为输入框加入数字js校验代码分享
2017/11/02 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
layui清空,重置表单数据的实例
2019/09/12 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
Python 查看文件的读写权限方法
2018/01/23 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
Django 实现购物车功能的示例代码
2018/10/08 Python
python 内置模块详解
2019/01/01 Python
基于python实现KNN分类算法
2020/04/23 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
python装饰器的特性原理详解
2019/12/25 Python
如何定义TensorFlow输入节点
2020/01/23 Python
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
全球精选男装和家居用品:Article
2020/04/13 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js