首页IT科技动态路由传值和query(解决router.beforeEach()动态加载路由出现死循环问题)

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

时间2025-08-03 02:27:30分类IT科技浏览5146
导读: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 })

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

声明:本站所有文章       ,如无特殊说明或标注             ,均为本站原创发布                     。任何个人或组织                    ,在未征得本站同意时       ,禁止复制       、盗用                    、采集              、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益       ,可联系我们进行处理             。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
mate40护眼壁纸(华为mate40怎么打开护眼模式) 网页动效(探析网页动效在网站体验设计中的重要作用)