解决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 相关控件的事件操作分解
Aug 03 Javascript
javascript 窗口加载蒙板 内嵌网页内容
Nov 19 Javascript
jQuery代码优化之基本事件
Nov 01 Javascript
JS实现时间格式化的方式汇总
Oct 16 Javascript
各浏览器对document.getElementById等方法的实现差异解析
Dec 05 Javascript
Javascript中call与apply的学习笔记
Sep 22 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
Aug 02 Javascript
AngularJS通过$location获取及改变当前页面的URL
Sep 23 Javascript
js html5 css俄罗斯方块游戏再现
Oct 17 Javascript
详谈js中window.location.search的用法和作用
Feb 13 Javascript
JS+Ajax实现百度智能搜索框
Aug 04 Javascript
openLayer4实现动态改变标注图标
Aug 17 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 水平的题目
2007/05/30 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
php利用smtp类实现电子邮件发送
2015/10/30 PHP
php微信开发之上传临时素材
2016/06/24 PHP
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
AngularJS 与百度地图的结合实例
2016/10/20 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
vue 实现 rem 布局或vw 布局的方法
2019/11/13 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
Python解析json代码实例解析
2019/11/25 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
python实现从ftp服务器下载文件
2020/03/03 Python
python如何更新包
2020/06/11 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
美国性感女装网站:bebe
2017/03/04 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
社区工作者思想汇报
2014/01/13 职场文书
村官学习十八大感想
2014/01/15 职场文书
应届毕业生个人求职信范文
2014/01/29 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
企业介绍信范文
2015/01/30 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
Element实现动态表格的示例代码
2021/08/02 Javascript