解决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 相关文章推荐
IE6下CSS图片缓存问题解决方法
Dec 09 Javascript
不到30行JS代码实现Excel表格的方法
Nov 15 Javascript
bootstrap改变按钮加载状态
Dec 01 Javascript
javascript实现rgb颜色转换成16进制格式
Jul 10 Javascript
js跨域请求数据的3种常用的方法
Dec 01 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
Dec 29 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
Oct 19 jQuery
详解vuex持久化插件解决浏览器刷新数据消失问题
Apr 15 Javascript
vue实现路由切换改变title功能
May 28 Javascript
基于JavaScript 实现拖放功能
Sep 12 Javascript
JS document内容及样式操作完整示例
Jan 14 Javascript
jquery实现点击弹出对话框
Feb 08 jQuery
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程序开发范例学习之表单 获取文本框的值
2011/08/08 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
php常用数组函数实例小结
2016/12/29 PHP
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
jquery css 设置table的奇偶行背景色示例
2014/06/03 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
实例解析Vue.js下载方式及基本概念
2018/05/11 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
python如何读取bin文件并下发串口
2019/07/05 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
如何完美的建立一个python项目
2020/10/09 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
2013/08/11 HTML / CSS
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
留学自荐信写作方法
2014/01/27 职场文书
应届中专生自荐书范文
2014/02/13 职场文书
公职人员索取回扣检举信
2014/04/04 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
运动会演讲稿300字
2014/08/25 职场文书
学校创先争优活动总结
2014/08/28 职场文书
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
2022/04/12 PostgreSQL