vue动态添加路由页面刷新失效的解决方法
Admin 2021-04-06 群英技术资讯 2500 次浏览
后台管理系统的权限控制是通过在前端页面定义权限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相关知识大家能够关注其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
路由权限控制常用于后台管理系统中,对不同业务人员能够访问的页面进行一个权限的限制。本文主要介绍了两种Vue 路由权限控制,具有一定的参考价值,感兴趣的可以了解一下
jQuery中的$符号表示什么?日常中我们看到$符号是表示美元的符号,但是在jQuery中$符号是代表获取的意思,是一个回传函数。这篇我们就来了解看看$符号怎么样使用。
js实现签到日历 本文实例为大家分享了js实现签到日历的具体代码,供大家参考,具体内容如下 wxml代码 <view class="boxMain" style="height:{{dateList.length>35?'805rpx':'730rpx'}}"> <view class="calendarHeader"> <view>本月已签到<text>{{recordLis ...
这篇文章主要介绍javascript休眠或等待怎么用的内容,下文示例对新手学习和理解javascript休眠有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章能有所收获,接下来小编带着大家一起了解看看。
这篇文章主要为大家详细介绍了JavaScript canvas实现雨滴特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008