addroutes刷新_vue-router addRoutes后如何刷新?

从后台读取角色menus对象,采用addRoutes方式增加路由,登出后换用户登录继续addRoutes路由如果存在重复的会报

vue-router.common.js?1ecf:18 [vue-router] Duplicate named routes definition: { name: "top-menu", path: "" }

并且报错(据观察是router不存在跳转不到)

TypeError: Cannot read property 'beforeRouteEnter' of undefined

如果刷新页面,这两个错误都不会

手摸手解决方案是 location.reload()登出重新加载页面(重新加载页面用户体验不好,目前是直接跳转的)

logout() {

this.$store.dispatch('LogOut').then(() => {

location.reload()// 为了重新实例化vue-router对象 避免bug

})

}

我的代码如下(多粘点对做权限的同学有参考意义)

main.js

// 不重定向白名单

const whiteList = ['/login', ];

router.beforeEach((to, from, next) => {

let url = to.path;

if (sessionStorage.getItem("tokenList")) {

const menus = JSON.parse(sessionStorage.getItem('menus'));

// 路由是否加载完成标识

if(!store.getters.routerLoadDone){

if (menus && menus.length > 0) {

store.dispatch('GenerateRoutes', { menus }).then(() => { // 生成可访问的路由表

router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表

next({

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值