解决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的键盘事件修改代码
Feb 24 Javascript
jquery ajax属性async(同步异步)示例
Nov 05 Javascript
jQuery实现视频作为全屏幕背景
Dec 18 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
Dec 01 Javascript
js创建对象的方法汇总
Jan 07 Javascript
javascript和jquery实现用户登录验证
May 04 Javascript
javascript 利用arguments实现可变长参数
Nov 21 Javascript
vue2.0开发实践总结之疑难篇
Dec 07 Javascript
js Canvas绘制圆形时钟效果
Feb 17 Javascript
vue 组件中slot插口的具体用法
Apr 03 Javascript
vue中的数据绑定原理的实现
Jul 02 Javascript
详解Vue前端对axios的封装和使用
Apr 01 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
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
PHP中防止SQL注入实现代码
2011/02/19 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
js prototype截取字符串函数
2010/04/01 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
jquery的checkbox,radio,select等方法小结
2016/08/30 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
javascript实现文本框标签验证的实例代码
2018/10/14 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
2019/04/09 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
ES6箭头函数和扩展实例分析
2020/05/23 Javascript
java中两个byte数组实现合并的示例
2018/05/09 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
python随机模块random使用方法详解
2020/02/14 Python
python实现堆排序的实例讲解
2020/02/21 Python
通俗讲解python 装饰器
2020/09/07 Python
创造美妙香氛体验:Aera扩散器和香水
2018/11/25 全球购物
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
迟到检讨书400字
2014/01/13 职场文书
班主任工作经验材料
2014/02/02 职场文书
采购部经理岗位职责
2014/02/10 职场文书
酒店管理专业自荐信
2014/05/23 职场文书
统计工作个人总结
2015/03/03 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
军训新闻稿范文
2015/07/17 职场文书
新兵入伍决心书
2015/09/22 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
2022微信温控新功能上线
2022/05/09 数码科技