时间:2021-05-26
昨天在做vue后台管理系统有关权限页面动态添加到路由的功能时,遇到一个问题:动态添加的路由页面,在页面刷新时出现了404的情况。
后台管理系统的权限控制是通过在前端页面定义权限code, 把code给后台同学保存配置到表中,之后根据后台返回的权限code列表与前端页面配置的code菜单列表做筛选匹配,code相等的页面就是有权限的页面,再通过router.addRoute()动态添加到路由中,有权限的路由才可以被访问,否则会提示无权限。
固定路由一开始就会放在new Router中,比如登录页面login
登录后,通过调用vuex中的方法,完成获取权限code,动态筛选权限路由页面操作,然后通过router.addRoute()将有权限菜单添加到路由中,进入动态添加的路由页面,刷新页面出现404
页面刷新时,路由重新初始化,动态添加的路由此时已不存在,只有一些固定路由(比如登录页面)还在,所以出现了404的情况
VUEX store中存储的数据会在页面刷新时清空。
在路由的全局导航router.beforeEach处做个判断,根据VUEX中存放的list是否有值来判断页面是否是刷新,如果不为0,则是第一次登陆,登录后会走匹配路由的方法,不会有问题;如果list.length为0,就为刷新页面,需要重新执行路由匹配,重新添加动态路由即可。
———router.js————-
const constantRoutes = [ { 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)const createRouter = () => new VueRouter({ routes: constantRoutes })export function resetRouter() { const newRouter = createRouter() router.matcher = newRouter.matcher // reset router}const router = createRouter() //页面刷新后重新设置权限页面动态路由,防止出现动态路由404问题const reSetPermissionList = to => { return new Promise((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) => { const accessToken = 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 路由页面刷新的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1.vue打包后font-awesome字体失效解决方案:2.打包后图片资源失效解决方案:针对html中引用的图片针对css添加的背景中引用的图片以上这篇基于v
环境vue项目,页面有搜索、筛选项等。需求页面跳转,切换或者刷新,希望可以记住用户在页面的筛选状态方案v1vue有提供一种缓存组件的解决方案—keep-aliv
问题:在使用vue-cli3搭建项目之后,发现修改.vue文件里面的内容之后,页面不会自动刷新。解决方案:只需要在vue.config.js文件中配置一下就可以
前言企业运营后台页面很多,路由如若不区分模块化配置,所有路由挤在同一个文件将不好维护,所以路由的配置也要模块化分享两个解决方案——Vue路由配置的模块化(Pla
Vue-router是伴随着Vue框架出现的路由系统,它也是公认的一种优秀的路由解决方案。在使用Vue-router时候,我们常常会使用其自带的路径跳转组件Li