解决vue-router路由拦截造成死循环问题


Posted in Javascript onAugust 05, 2020

笔记:vue-router路由拦截造成死循环,在做路由拦截的时候,一直出现死循环.

router的index.js文件路由配置

const router = new Router({
routes: [{path: '/login',name: 'login',component: Login,meta: {isShow: true}},
    {path: '/',component: Layout,redirect: '/home',meta: {title: "首页菜单"},
    children: [{ path: 'home', name: 'home', component: () => import('@/views/Hmoe'),
    meta: { title: "首页" } }],}]
})

一开始路由拦截是这样写的,但是这样的结果就是,在token存在的时候,可以直接访问login页面,但是实际项目中是,在token存在的时候不能可以访问login页面

router.beforeEach((to, from, next) => {
 if (!to.meta.isShow && !sessionStorage.getItem("token")) {
  return next('/login');
 }
 next();
})

根据项目的需求进行修改,然后就出现下图的报错,出现了死循环

router.beforeEach((to, from, next) => {
 if (sessionStorage.getItem("token")) {
  if (to.meta.isShow) {
   next('/home')
  } else {
   next()
  }
 } else {
  next('/login');
 }
})
 
//检查代码
router.beforeEach((to, from, next) => {
 if (sessionStorage.getItem("token")) {
  if (to.meta.isShow) {
   console.log("1")
   next('/home')
  } else {
   console.log("2")
 
   next()
  }
 } else {
  console.log("3")
  next('/login');
 }
})

解决vue-router路由拦截造成死循环问题

解决vue-router路由拦截造成死循环问题

然后接着进行修改,就把浏览器弄崩溃了,此处省略一万字T_T.......

最后修改的代码,终于得到了最终的需要的结果

router.beforeEach((to, from, next) => {
 if (sessionStorage.getItem('token')) {//toekn存在
  if (to.path == '/login') {//token存在,并且是login页面
   next('/home');
  } else {//token存在,不是login页面
   next();
  }
 } else {
  if (to.path == '/login') {//token不存在,并且是login页面
   next();
  } else {//token不存在,不是login页面
   next('/login');
  }
 }
});

关于vue-router导航守卫,官方给出的解释是

解决vue-router路由拦截造成死循环问题

出现无限循环是因为之前我没有弄清楚next()流程

因为每次跳转到一个路由的时候都会 触发 全局守卫 由于判断条件未改变 所以 一直循环

关于上面代码我自己的理解,就是当token存在的时候,判断页面是否是login页面,如果是就next到首页,不是就直接next。如果token不存在,页面为login就直接next,不是login就直接next到login页面,因为一开始在第一个else里面没有做判断,那么他的条件一直未改变,所以他会一直重复next到login才造成的死循环,后面写了判断之后就正常了....

补充知识:vue-router promise问题

最近在项目中使用element发现了一个bug

侧边栏list 点击没问题 如果在这个点击页面 在点击一次router-link 就会报错 但是不影响功能

去你引用vue-router的页面添加一段代码

const originalPush = Router.prototype.push
Router.prototype.push = function push(location) {
return originalPush.call(this, location).catch(err => err)
}

以上这篇解决vue-router路由拦截造成死循环问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 学习第六课 实现一个Ajax的TreeView
May 17 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
Apr 24 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
Feb 19 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
May 12 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
Aug 09 Javascript
jQuery flip插件实现的翻牌效果示例【附demo源码下载】
Sep 20 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
Oct 13 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
Mar 09 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
Apr 04 jQuery
Javascript获取某个月的天数
May 30 Javascript
通过jQuery学习js类型判断的技巧
May 27 jQuery
javascript+css实现俄罗斯方块小游戏
Jun 28 Javascript
Vue基于iview table展示图片实现点击放大
Aug 05 #Javascript
vue相同路由跳转强制刷新该路由组件操作
Aug 05 #Javascript
解决vue路由name同名,路由重复的问题
Aug 05 #Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
Aug 05 #Javascript
Vue 同步异步存值取值实现案例
Aug 05 #Javascript
详解vue路由
Aug 05 #Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
Aug 05 #Javascript
You might like
php设计模式 Facade(外观模式)
2011/06/26 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
js 判断 enter 事件
2009/02/12 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
js生成随机数的过程解析
2015/11/24 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
Vue的轮播图组件实现方法
2018/03/03 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
JavaScript中this用法学习笔记
2019/03/17 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
2019/04/25 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
flask session组件的使用示例
2018/12/25 Python
Python程序暂停的正常处理方法
2019/11/07 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
python实现飞船大战
2020/04/24 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
消防安全汇报材料
2014/02/08 职场文书
人事文员岗位职责
2014/02/16 职场文书
租赁意向书范本
2014/04/01 职场文书
我的老师教学反思
2014/05/01 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
色戒观后感
2015/06/12 职场文书
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android