解决router.beforeEach()动态加载路由出现死循环问题

 更新时间:2022年10月08日 14:29:57   作者:k55  
这篇文章主要介绍了解决router.beforeEach()动态加载路由出现死循环问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

router.beforeEach()动态加载路由出现死循环

采用beforeEach做路由过滤,如果没登录就直接跳转到登录界面,然而发现个问题就是要么跳转到登录页面、然后再调回首页,要么卡着不动、要么出现空白页面。

1、router.beforeEach( to , from ,next) 介绍

  • to: 即将路由的地址
  • form: 当前的路由地址,也就是马上要离开的地址
  • next(): 执行进入下一个路由
  • next(false): 禁止进入下一个路由
  • next('/login'): 路由到/login地址

2、两种死循环问题

(1)路由到相同地址的死循环

比如在beforeEach中设置未登录(userData为null)就跳转到登录页面

在非登录页面是没有问题的,但是在登录页面就出现了死循环或者空白页,通过打印我们发现浏览器在登录页反复跳转。

在登录页面因为没登录,userData为null,这时候通过next(’\login’)就会重定向到登录页面,重定向到登录页面后,这时候userData依然为空,那么就要继续重定向登录页面,于是出现了死循环。

对这种情况加个判断条件就能解决。

(2)动态加载路由表出现的死循环

在beforeEach()通过动态加载路由表

在beforeEach()中都会获取路由表存入store,然后从store取出动态加入此路由表。

但是每次路由之前都会重新添加路由表,每次添加完路由表当前默认路径是首页(to.path显示内容)而不是登陆页面,页面会自动跳转到首页,但是如果这时候通过next(’/login’)跳转到登录页面,那么就会重新路由,在路由前又开始重新添加路由表,然后当前路径是首页,这时候又要跳转到登录页面因此就会出现死循环。

这时候我们就不能反复加载路由表,加个判断条件就行了。

vue动态加载路由进入页面白屏或beforeEach死循环踩坑

开发的哥们儿从网上找了一个简单的框架,通过auth的配置来决定什么权限可以进入到什么页面。具体操作就是登陆获取用户的权限,然后遍历本地的总路由表匹配权限返回当前用户可以访问的路由表。网上大多数的方案是从后端接口获取权限和路由表。此为两者之间的差异,但是不影响填坑方案的可行性

先放上本地总路由表部分代码,就是在这个表中根据权限进一步遍历筛选的,通过硬编码的方式写在项目中,auth[]内用数字、用中文、用单词也都是可以的

const routerList = [{
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    auth: [0, 1, 2],
    meta: {
      title: '首页',
      icon: 'dashboard'
    },
    children: [{
      path: 'dashboard',
      name: 'Dashboard',
      component: () => import('@/views/dashboard/index'),
      meta: {
        title: '首页',
        icon: 'dashboard'
      },
      auth: [0, 1, 2]
    }]
  },
  {
    path: '/enterprises',
    component: Layout,
    name: 'Enterprises',
    redirect: 'noRedirect',
    auth: [0, 1, 2],
    meta: {
      title: '智慧园区',
      icon: 'el-icon-office-building'
    },
    children: [
      {
        path: 'huanjingjiance',
        name: 'huanjingjiance',
        component: () => import('@/views/environment/monitor'),
        auth: [0, 2],
        meta: {
          title: '环境监测'
        },
      }
    ]
  },
  {
    path: '/user',
    component: Layout,
    name: 'User',
    redirect: 'noRedirect',
    auth: [0, 1],
    meta: {
      title: '人员信息',
      icon: 'el-icon-user'
    },
    children: [{
      path: 'index',
      name: 'Index',
      component: () => import('@/views/user/index'),
      meta: {
        title: '个人信息'
      },
      auth: [0, 1],
    }]
  }
]

首先在路由中需要指定登录的页面,这个是不分权限的,所以不需要动态获取

const constantRoutes = [
  {
    path: '/login',
    component: () => import('@/views/login/index'),
    hidden: true
  },
  ...dynamicRouter
]

var createRouter = () => new Router({
  mode: 'history',
  scrollBehavior: () => ({
    y: 0
  }),
  routes: constantRoutes
})

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue自定义指令详细

    Vue自定义指令详细

    这篇文章主要介绍了Vue自定义指令,文章从背景开始详细介绍Vue自定义指令的详细内容,随着Vue自定义指令的相关资料展开具体内容,需要的朋友可以参考一下
    2021-11-11
  • vue+element实现动态换肤的示例代码

    vue+element实现动态换肤的示例代码

    本文主要介绍了vue+element实现动态换肤的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • vue parseHTML函数源码解析 AST预备知识

    vue parseHTML函数源码解析 AST预备知识

    这篇文章主要为大家介绍了vue parseHTML函数源码解析 AST预备知识示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Vue.js 图标选择组件实践详解

    Vue.js 图标选择组件实践详解

    这篇文章主要介绍了Vue.js 图标选择组件实践详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Vue数据驱动模拟实现3

    Vue数据驱动模拟实现3

    这篇文章主要为大家详细介绍了Vue数据驱动模拟实现,教大家如何在某个对象中,新增某个属性,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • vue-cli开发时,关于ajax跨域的解决方法(推荐)

    vue-cli开发时,关于ajax跨域的解决方法(推荐)

    下面小编就为大家分享一篇vue-cli开发时,关于ajax跨域的解决方法(推荐),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • jenkins自动构建发布vue项目的方法步骤

    jenkins自动构建发布vue项目的方法步骤

    这篇文章主要介绍了jenkins自动构建发布vue项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • vue3+vite项目跨域配置踩坑实战篇

    vue3+vite项目跨域配置踩坑实战篇

    vue3是一个流行的前端框架,vite是一个快速的构建工具,下面这篇文章主要给大家介绍了关于vue3+vite项目跨域配置踩坑实战的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 浅谈vue项目优化之页面的按需加载(vue+webpack)

    浅谈vue项目优化之页面的按需加载(vue+webpack)

    本篇文章主要介绍了vue项目优化之页面的按需加载(vue+webpack),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • vue+axios+java实现文件上传功能

    vue+axios+java实现文件上传功能

    这篇文章主要为大家详细介绍了vue+axios+java实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06

最新评论