vue 动态添加的路由页面刷新时失效的原因及解决方案
问题描述
昨天在做vue后台管理系统有关权限页面动态添加到路由的功能时,遇到一个问题:动态添加的路由页面,在页面刷新时出现了404的情况。
场景
后台管理系统的权限控制是通过在前端页面定义权限code,把code给后台同学保存配置到表中,之后根据后台返回的权限code列表与前端页面配置的code菜单列表做筛选匹配,code相等的页面就是有权限的页面,再通过router.addRoute()动态添加到路由中,有权限的路由才可以被访问,否则会提示无权限。
固定路由一开始就会放在newRouter中,比如登录页面login
接口返回
前端菜单定义
vuex中的方法
出现的问题
登录后,通过调用vuex中的方法,完成获取权限code,动态筛选权限路由页面操作,然后通过router.addRoute()将有权限菜单添加到路由中,进入动态添加的路由页面,刷新页面出现404
原因分析
页面刷新时,路由重新初始化,动态添加的路由此时已不存在,只有一些固定路由(比如登录页面)还在,所以出现了404的情况
解决方案
VUEXstore中存储的数据会在页面刷新时清空。
在路由的全局导航router.beforeEach处做个判断,根据VUEX中存放的list是否有值来判断页面是否是刷新,如果不为0,则是第一次登陆,登录后会走匹配路由的方法,不会有问题;如果list.length为0,就为刷新页面,需要重新执行路由匹配,重新添加动态路由即可。
实现代码route/index.js的导航守卫中添加逻辑判断
———router.js————-
constconstantRoutes=[ { path:'/', redirect:'/login' }, { path:'/login', name:'login', meta:{ auth:false }, component:()=>import('@/views/login') }, { path:'/layout', name:'layout', meta:{ auth:true }, component:()=>import('@/views/layout/index'), children:[ { path:'/index', name:'index', component:()=>import('@/views/home') } ] }, { path:'*', component:()=>import('@/views/error/404') } ] Vue.use(VueRouter) constcreateRouter=()=> newVueRouter({ routes:constantRoutes }) exportfunctionresetRouter(){ constnewRouter=createRouter() router.matcher=newRouter.matcher//resetrouter } constrouter=createRouter() //页面刷新后重新设置权限页面动态路由,防止出现动态路由404问题 constreSetPermissionList=to=>{ returnnewPromise((resolve,reject)=>{ if(to.path!=='/login'&&store.state.permission.permissionList.length===0){ store .dispatch('permission/getPermissionList') .then(()=>{ resolve('permCode') }) .catch(error=>{ resolve('permCode') }) }else{ resolve() } }) } router.beforeEach((to,from,next)=>{ constaccessToken=localStorage.getItem('accessToken') if(_.isEmpty(accessToken)){//是否已经登录否去登陆页面 next({ path:'/login', query:{ redirect:to.fullPath } }) }else{//已登录用户进入页面 if(to.path==='/login'){ next({path:'/index'}) }else{ reSetPermissionList(to).then(data=>{ data==='permCode'?next({path:to.path,query:to.query}):next() }) } } })
总结
主要通过在全局导航处判断VUEX中的数据是否存在,判断页面是否刷新,是的话重新走一遍权限路由匹配的方法。
以上就是vue动态添加的路由页面刷新时失效的原因及解决方案的详细内容,更多关于vue路由页面刷新的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。