解决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 相关文章推荐
打开超链需要“确认”对话框的方法
Mar 08 Javascript
动态刷新 dorado树的js代码
Jun 12 Javascript
js弹出层之1:JQuery.Boxy (二)
Oct 06 Javascript
JavaScript获取表单内所有元素值的方法
Apr 02 Javascript
jquery简单实现外部链接用新窗口打开的方法
May 30 Javascript
JS模拟Dialog弹出浮动框效果代码
Oct 16 Javascript
快速掌握jQuery插件开发
Jan 19 Javascript
html5 canvas 详细使用教程
Jan 20 Javascript
Node.js 的模块知识汇总
Aug 16 Javascript
Web技术实现移动监测的介绍
Sep 18 Javascript
Vue 技巧之控制父类的 slot
Feb 24 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
Sep 04 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的session过期设置
2013/06/29 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
PHP中使用curl入门教程
2015/07/02 PHP
PHP实现生成唯一会员卡号
2015/08/24 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
javascript类型转换示例
2014/04/29 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
python中dict使用方法详解
2019/07/17 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
2020/10/15 Python
财政局个人年终总结
2015/03/03 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
世界名著读书笔记
2015/06/25 职场文书
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android