vue-router 动态添加路由,二次添加遇到的问题

@[TOC] 修改记录

vue-router 动态添加路由,二次添加遇到的问题
问题(vue版本:2.6.2):
  • 因为路由根据登录角色获取的路由信息,如果退出后再次登录则需要重新获取路由信息
  • 因为addRoutes 给路由表中添加路由,导致有些路由信息重复报警告:Duplicate named routes definition
解决:
// constantRoutes是公共路由,如下:
export const constantRoutes = [{
	path: '/redirect',
	component: Layout,
	hidden: true,
	children: [{
		path: '/redirect/:path(.*)',
		component: (resolve) => require(['@/views/redirect'], resolve)
	}]
}]
// 将router.js下的index.js中的如下代码:
export default new Router({
	mode: 'hash', // 去掉url中的#
	scrollBehavior: () => ({
		y: 0
	}),
	routes: constantRoutes
})
// 修改为------------------------
export const createRouter = (routes) => new Router({
	mode: 'hash', // 去掉url中的#
	scrollBehavior: () => ({
		y: 0
	}),
	routes
})
export const router = createRouter(constantRoutes);

找到使用 addRoutes 方法的文件

// 将router 的引入如下
import router from './router'
// 修改为------------------------
import { router, createRouter,constantRoutes } from '@/router'

// 将router.addRoutes这段代码如下:
router.addRoutes(accessRoutes) // 动态添加可访问路由表
// 修改为------------------------
router.matcher = createRouter(constantRoutes).matcher; // 重置路由表
router.addRoutes(accessRoutes) ;// 动态添加可访问路由表
// accessRoutes:就是你请求到的路由信息的自定义字段
// 注意  router, createRouter,constantRoutes 要一一对应

注意: 这个时候并没有修改完成,你可能会发现如下错误
Error in render: "TypeError: Cannot read property 'matched' of undefined"
找到所有 import router from './router' 的文件。一般在都是main.js。

// 将如下代码:
import router from './router
//修改为------------------------
import {router} from './router'

主要是因为在修改router.js中的代码时,导出方式变更了,所以改掉即可。

如需学习Matcher,请看Vue Router中Matcher的初始化分析

如有错误,或疑问请留言,谢谢各位观看!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值