解决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 相关文章推荐
web性能优化之javascript性能调优
Dec 28 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
Oct 18 Javascript
Javascript简单实现可拖动的div
Oct 22 Javascript
JS生成不重复随机数组的函数代码
Jun 10 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
Dec 31 Javascript
js右下角弹出提示框示例代码
Jan 12 Javascript
JS实现简单的右下角弹出提示窗口完整实例
Jun 21 Javascript
jQuery根据name属性进行查找的用法分析
Jun 23 Javascript
JS转换HTML转义符的方法
Aug 24 Javascript
AngularJS  ng-repeat遍历输出的用法
Jun 19 Javascript
js实现二级联动简单实例
Jan 11 Javascript
vue实现图片裁剪后上传
Dec 16 Vue.js
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
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
ezSQL PHP数据库操作类库
2010/05/16 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
2019/04/04 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
javascript实现留言板功能
2020/02/08 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
python如何实现一个刷网页小程序
2018/11/27 Python
python模糊图片过滤的方法
2018/12/14 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
C语言如何决定使用那种整数类型
2016/11/26 面试题
介绍一下gcc特性
2012/01/20 面试题
幼儿园母亲节活动方案
2014/03/10 职场文书
给老师的一封建议书
2014/03/13 职场文书
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
安全责任协议书
2014/04/21 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
分享几种python 变量合并方法
2022/03/20 Python