解决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的日期选择控件
Oct 27 Javascript
js 静态动态成员 and 信息的封装和隐藏
May 29 Javascript
js滚动条回到顶部的代码
Dec 06 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
Jan 11 Javascript
window.open关于浏览器拦截问题分析及解决方法
Feb 05 Javascript
jquery中change()用法实例分析
Feb 06 Javascript
jQuery绑定自定义事件的魔法升级版
Jun 30 Javascript
JS关闭窗口时产生的事件及用法示例
Aug 20 Javascript
AngularJS实现Input格式化的方法
Nov 07 Javascript
微信小程序实现顶部下拉菜单栏
Nov 04 Javascript
关于vue路由缓存清除在main.js中的设置
Nov 06 Javascript
微信小程序实现弹幕墙(祝福墙)
Nov 18 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二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
javascript封装 Cookie 应用接口
2015/08/07 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
javascript基础语法——全面理解变量和标识符
2016/06/02 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
React组件的三种写法总结
2017/01/12 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
详解Node.js模板引擎Jade入门
2018/01/19 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
jquery检测上传文件大小示例
2020/04/26 jQuery
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
python虚拟环境迁移方法
2019/01/03 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
学习Python爬虫的几点建议
2020/08/05 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
师范生实习的个人自我鉴定
2013/10/20 职场文书
高中自我鉴定范文
2013/11/03 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
公司感恩节活动策划书
2014/10/11 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
课程设计感想范文
2015/08/11 职场文书
新娘婚礼答谢词
2015/09/29 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
2019年个人工作总结范文
2019/03/25 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书