Vue动态路由路径重复及刷新丢失页面问题的解决
Vue动态路由路径重复及刷新丢失页面
1.使用router.addRoutes(teacherRouter);
添加完路由切换路由时,vue会警告路由名字重复
问题出现原因是:动态路由添加时调佣addRoutes();它只会帮你注入路由,不会帮你把前面的路由清掉。如此一来就重复添加了。
解决方法:路由动态添加关键页面需要在路由配置页(router/index.js)添加自定义方法
router.$addRoutes = params => { router.matcher = new Router({ routes: router.options.routes // 关键代码 }).matcher; router.addRoutes(params); };
2.问题
在添加后进行页面刷新后,动态添加的路由会消失,路劲找不到
可以使用localstorage缓存,页面路由权限判断页(promission.js)用了路由beforeEach可以直接判断路由刷新:
if (from.name === null) { // 刷新 router.$addRoutes(accessRoutes); // 确保页面加载完成 next({ ...to, replace: true }); }
3.问题
切换不同角色权限,之前动态添加的路由没有被清除,进入看到的还是上次进入的权限页面。
问题在于vue的store没有被清空,把store里的route清空就行:
可以在退出登录设置,也可以在添加路由时清空,以下代码为store内permission.js添加动态路由前清空路由
const mutations = { SET_ROUTES: (state, routes) => { state.addRoutes = routes; state.routes = constantRoutes.concat(routes); }, RESET_ROUTES: (state, payLoad) => { state.addRoutes = []; state.routes = []; } };
generateRoutes({ commit }, roles) { return new Promise(resolve => { // 关键代码 == 添加路由前将路由重置为空 commit("RESET_ROUTES"); // 设置登录的路由权限 let accessedRoutes; if (roles === 4) { // 教师登录 accessedRoutes = teacherRouter; } if (roles === 3) { // 学生登录 accessedRoutes = studentRouter; } commit("SET_ROUTES", accessedRoutes); resolve(accessedRoutes); });
Vue路由动态添加重复警告重复
动态添加路由后,控制台警告重复,在router.js中添加下面代码
const createRouter = () => new Router({ mode: 'history', routes: constantRoutes }) const router = createRouter() export function resetRouter () { const newRouter = createRouter() router.matcher = newRouter.matcher } export default router
addRoutes()方法是router自带的原生方法,是动态添加路由的,它并没有删除之前路由中原有的路由所以在permission.js中引入router,并且添加在addRoutes之前resetRouter
import router,{resetRouter} from './router' store.dispatch('GenerateRoutes').then(accessRoutes => { // 根据roles权限生成可访问的路由表 resetRouter() router.addRoutes(accessRoutes)// 动态添加可访问路由表 })
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
vue elementui table编辑表单时弹框增加编辑明细数据的实现
在Vue项目中,通过使用Element UI框架实现表单及其明细数据的新增和编辑操作,主要通过弹窗形式进行明细数据的增加和编辑,有效提升用户交互体验,本文详细介绍了相关实现方法和代码,适合需要在Vue项目中处理复杂表单交互的开发者参考2024-10-10vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
这篇文章主要介绍了vue.js中使用微信扫一扫解决invalid signature问题(推荐),本文通过实例代码给出解决方法,代码简单易懂非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下2020-04-04使用 Element UI Table 的 slot-scope方法
这篇文章主要介绍了使用 Element UI Table 的 slot-scope方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-10-10element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
这篇文章主要介绍了element-plus一个vue3.xUI框架(element-ui的3.x 版初体验),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-12-12
最新评论