解决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 相关文章推荐
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
Apr 13 Javascript
js怎么终止程序return不行换jfslk
May 30 Javascript
AngularJS基础学习笔记之控制器
May 10 Javascript
js比较日期大小的方法
May 12 Javascript
详解JavaScript基于面向对象之创建对象(2)
Dec 10 Javascript
基于zepto.js简单实现上传图片
Jun 21 Javascript
浅谈webpack 自动刷新与解析
Apr 09 Javascript
实例详解Node.js 函数
Jun 10 Javascript
记一次webapck4 配置文件无效的解决历程
Sep 19 Javascript
layer弹出层倒计时关闭的实现方法
Sep 27 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
Jul 26 Javascript
jquery实现异步文件上传ajaxfileupload.js
Oct 23 jQuery
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中转义mysql语句的实现代码
2011/06/24 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
支付宝服务窗API接口开发php版本
2016/07/20 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
JS实现div内部的文字或图片自动循环滚动代码
2013/04/19 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
python操作oracle的完整教程分享
2018/01/30 Python
对Python 多线程统计所有csv文件的行数方法详解
2019/02/12 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
计算机专业个人求职自荐信
2013/09/21 职场文书
医学院学生的自我评价分享
2013/11/19 职场文书
《假如》教学反思
2016/02/17 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
python面向对象版学生信息管理系统
2021/06/24 Python