vue-admin-element路由死循环,页面白屏卡死问题

本文探讨了在vue-admin-element项目中遇到的路由死循环问题,导致页面白屏的原因是`beforeEach`守卫中未正确调用`next()`。解决方案是在store模块的user.js中设置权限角色,并在`beforeEach`首次执行时触发,确保异步操作的正确处理。同时提到了`next()`、`next({ ...to, replace: true })`和`next('/')`在路由守卫中的区别。" 112469064,10547639,WPAD协议与内网渗透:从原理到利用,"['网络安全', '内网渗透', 'WPAD协议', '代理配置', 'NetBIOS协议']
摘要由CSDN通过智能技术生成

原理:

permisson.js中,router.beforeEach()做了路由拦截

beforeEach 守卫是异步解析执行,只有执行next()才表示路由成功可以被resolved,跳出循环直接进入to路由。
next(‘login’) 表示路由拦截成功,重定向至login,会再次调用beforeEach()
next() 和 next({ …to, replace: true })是不一样的,后者会再次调用beforeEach()

BUG出现原因:

beforeEach()一直没有调用到next(),出现无限循环。
我这里的出现原因是没有拿到用户权限roles信息,导致一直无限循环
在这里插入图片描述

解决:

在store中写了一个触发SET_ROLES的方法,并在第一次走此循环的时候触发一下。
/src/store/modules/user.js:

//写在方法actions对象中
setRole({ commit }, roles) {
    return new Promise(resolve => {
      commit('SET_ROLES',roles )
      resolve()
    })
  },

permisson.js中在初次循环时调用(上图黄色标注处)
注意:在被aysnc修饰的beforeEach中共调用store的异步函数,由于beforeEach加上了async修饰,store调用是前面要加上await修饰嗷。

await store.dispatch('user/setRole', roles)

ps:详细VUE 路由守卫 next() / next({ …to, replace: true }) / next(‘/‘)的区别可参考这篇

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值