router.beforeEach() 动态加载路由出现死循环问题

采用beforeEach做路由过滤,如果没登录就直接跳转到登录界面,然而发现个问题就是要么跳转到登录页面、然后再调回首页,要么卡着不动、要么出现空白页面。

1、router.beforeEach( to , from ,next) 介绍

to: 即将路由的地址
form: 当前的路由地址,也就是马上要离开的地址
next(): 执行进入下一个路由
next(false): 禁止进入下一个路由
next('/login'): 路由到/login地址

2、两种死循环问题
(1)路由到相同地址的死循环

比如在beforeEach中设置未登录(userData为null)就跳转到登录页面
在这里插入图片描述
在非登录页面是没有问题的,但是在登录页面就出现了死循环或者空白页,通过打印我们发现浏览器在登录页反复跳转。在登录页面因为没登录,userData为null,这时候通过next(’\login’)就会重定向到登录页面,重定向到登录页面后,这时候userData依然为空,那么就要继续重定向登录页面,于是出现了死循环。 对这种情况加个判断条件就能解决。
在这里插入图片描述

(2)动态加载路由表出现的死循环

在beforeEach()通过动态加载路由表
在这里插入图片描述
在beforeEach()中都会获取路由表存入store,然后从store取出动态加入此路由表。但是每次路由之前都会重新添加路由表,每次添加完路由表当前默认路径是首页(to.path显示内容)而不是登陆页面,页面会自动跳转到首页,但是如果这时候通过next(’/login’)跳转到登录页面,那么就会重新路由,在路由前又开始重新添加路由表,然后当前路径是首页,这时候又要跳转到登录页面因此就会出现死循环。 这时候我们就不能反复加载路由表,加个判断条件就行了。
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值