解决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 showModalDialog 多层模态窗口实现页面提交及刷新的代码
Nov 28 Javascript
javascript 显示当前系统时间代码
Dec 28 Javascript
超简单的jquery的AJAX用法
May 10 Javascript
有关于JS构造函数的重载和工厂方法
Apr 07 Javascript
简单的jquery左侧导航栏和页面选中效果
Aug 21 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
Dec 08 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
Mar 01 Javascript
JS实现仿百度文库评分功能
Jan 12 Javascript
ionic2打包android时gradle无法下载的解决方法
Apr 05 Javascript
Node.js实现简单管理系统
Sep 23 Javascript
JQuery发送ajax请求时中文乱码问题解决
Nov 14 jQuery
在vue项目中 实现定义全局变量 全局函数操作
Oct 26 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中动态显示签名和ip原理
2007/03/28 PHP
PHP与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
简单PHP会话(session)说明介绍
2016/08/21 PHP
广告切换效果(缓动切换)
2009/05/27 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
打包发布Python模块的方法详解
2016/09/18 Python
Django 视图层(view)的使用
2018/11/09 Python
python自动化之Ansible的安装教程
2019/06/13 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
初中三年学生的学习自我评价
2013/11/13 职场文书
书法培训心得体会
2014/01/05 职场文书
2014年廉洁自律承诺书
2014/05/26 职场文书
企业消防安全责任书
2014/07/23 职场文书
汽车转让协议书范本
2014/12/07 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
中标通知书格式
2015/04/17 职场文书