首页 > 编程知识 正文

vue路由懒加载原理,vue怎么解决首次加载白屏问题

时间:2023-05-04 15:51:06 阅读:146050 作者:4171

开发人员从internet上查找了一个简单的框架,auth的配置决定了哪些权限进入哪个页面。 具体操作是登录以获取用户权限,遍历本地总路由表以匹配权限,并返回当前用户有权访问的路由表。 internet上的大多数方案都是从后端接口获取权限和路由表。 这是两者的区别,但不影响填孔方案的可行性

如果保留了本地总路由表部分的代码,则该表将根据权限进行进一步的遍历过滤,并以硬编码方式写入项目中。 在auth[]内可以使用数字,也可以使用中文,还可以使用单词

const routerList=[{ path: '/',component: Layout,redirect: '/dashboard ',auth : [ 0,1,2 ],元: children : [ { path : ' dashboard ',name: 'Dashboard ',component: ()=import meta:(title: ) ]顶级电脑path: )/enterprises ),common name: 'Enterprises ',redirect: 'noRedirect ',auth : [ 0,1,2 ],meta 3360 icon : } children : [ { path :’huanjingjiance’,name :’huanjingjiance’, 组件: (]=import (@/views/enews2)、meta:(title: )环境监测(、(}、) path: )/user、component redirect 1)、meta:(title: )人员信息)、icon : (El-icon-user )、children: )、path : (index )、name3360 name3360 ) in dren component 3360 (=import (' @/views/user/index ' )、meta: ) title: (个人信息)、auth: (,0,0

constconstantroutes=[ { path : '/log in ',component: ()=import('@/views/login/index ' ), 隐藏: tter .动态路由器(varcreaterouter=()=newrouter ) mode:'history ',scrollBehavior: )=() 登录完成,动态获取路由。 这里的逻辑是获取用户权限id,并通过filterRouter方法遍历和获取当前权限路由表。 虽然看到很多博客写了router.add routes (动态路由器),但在实际开发过程中,登录后进入主页是一个白色的屏幕,最终达到router.options.routes = dynamicRouter;

导出函数resetrouter (角色类型) { const newRouter=createRouter ) router.matcher=new router.matcher; //从接口动态获取路由表后,可以跳过此步骤的动态路由器=过滤器路由器(路由器列表,角色类型); router.options.routes=动态路由器; router.add routes (动态路由器; store.dispatch (动态路由器/动态路由器)、动态路由器); } exportfunctionfilterrouter (allrourer, roleType ) constres=allrourer.filter (item={ return item.auth.index of ) )、return item.au=-1 } (return item )

router在根保护的router.beforeEach中为空,需要再次添加路径。 在此,通过判断Vuex中是否保存有动态路由器路由表,来决定是否需要重新添加路径。 如果不写store.dispatch(‘dynamicRouter/dynamicRouter’, dynamicRouter);,就表示总是运行死循环,需要注意。 在这里引用其他博客形象的说明,说明为什么一直在else中奔跑。 原文《VUE 路由守卫 next() / next({ …to, replace: true }) / next(‘/‘) 说明》

addRoutes () )之后添加了addRoutes () )的路由,因此访问了addRoutes () )之后添加的路由,但此时addRoutes ) )的执行尚未结束因此,必须从新访问进行路由。

我该怎么解决这个问题?

此时,请使用addRoutes(…to,replace: true } )验证在addroutes ) )时动态添加的路由是否已完全加载。

next({ …to,replace: true }中的replace: true是一条设置信息,它告诉VUE在执行此操作后,无法使用浏览器上一步按钮返回到上一个根。

因此,next(…to,replace: true } )可以写为next )…to ),但addRoutes ) )尚未完成时,单击浏览器上的后退按钮即可完成任务

其实next(…to ) )的执行很简单,它可以判断:

如果在参数to中找不到对应的路由,请再次运行beforeeach ()、from、next,直到找到其中的next({ …to}对应的路由。

也就是说,在该时刻addRoutes ()已经完成,所以在找到对应的路由后,为了执行下一个朝向对应的路由的beforeeach )、from、next,这次是朝向对应的路由的beforeeach )

综上所述,我觉得如果我不写store.dispatch(‘dynamicRouter/dynamicRouter’, dynamicRouter);,就一直呆在else里,加载路由表也没用

if (store.getters.dynamic router.length0({ next ) ); }还可以根据} else {//权限从后端接口获取vardynamicrouter=过滤器路由器(路由器列表,角色类型)。 重新运行beforeEach时防止死循环的store.dispatch (动态路由器/动态路由器)、动态路由器); router.options.routes=动态路由器; router.add routes (动态路由器; next(…to,replace: true} ); }结束兼职,祝大家上线顺利,工作愉快!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。