当前位置: 首页 > Web前端 > vue.js

vue-router根据用户权限配置菜单

时间:2023-03-31 14:46:57 vue.js

业务逻辑。比如有一个系统,有两个角色,普通用户和管理员。普通用户登录后可以看到模块A,管理员登录后可以看到模块B。技术实现逻辑:用户登录后,后台判断用户的角色是普通用户还是管理员,然后返回根据角色的菜单权限,前端根据后台提供的菜单权限动态配置路由。用户看到的模块是那些匹配用户角色的模块。使用的技术vue-rouer:router.beforEach,next()filtervuex遇到的问题为什么会进入死循环?例如下面的例子(会让系统进入死循环)router.beforeEach((to,form,next)=>{if(用户已经登录){if(第一个入口){让变量进入forthefirsttimeMark;Addroutingdynamically;}next();}else{//如果用户没有登录next('/login');}}其实进入死循环的结果是因为vue-router文档中next()的解释我看不懂,我以为next('指定你想要的地方的路径')可以安全到达你,但不是当有路径的时候next传入的参数,总是会进入跳转操作why,why,thedocument其实写的很明显,因为知识储备不足,文档中的专业术语不敏感,重要的意思这些词的忽略!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!不传递参数时可用。因此,要防止进入死循环,就要知道什么时候使用next();为什么有时用next(),有时用next('/')或next({...to})?借助上图我们知道next()可以结束跳转操作。场景:小义的目标:进入地铁站乘坐地铁,于是小义进入地铁站,取出地铁卡【相当于使用next()】,即可进入地铁站。完成目标并结束本次行动。时序图如下:next('/')或next({...to})是跳转到指定地址,场景:小义目标:进入地铁站乘坐地铁,但是小义去到后到了地铁站,忘记带地铁卡了,回家找地铁卡,回到家也没找到,于是想到可以用手机登录地铁app扫描二维码进入,于是又回到了地铁站,但是回到地铁站后发现手机没电了,于是小义回家继续找地铁卡,就这样来回走动。没有地铁卡(next()),他就进不了地铁站坐地铁,就不能完成他的目标。时序图如下:前端开发简单逻辑routingguard权限配置逻辑router.beforeEach((to,form,next)=>{if(userhasloggedin){if(firstentry){会先进入Markthevariable;dynamicallyaddroutes;next('Gotothecorrespondingrolemodule');}else{//防止进入死循环,满足条件后用next()通知跳转行为结束next();}}else{//如果用户未登录,则转到登录页面if(如果未登录且获取的目标路由to.path等于登录页面){next('/login');}else{//知道获取到的目标路由to.path是去登陆页面,则执行停止跳转的操作next();}}}