基于vue 动态菜单 刷新空白问题的解决


Posted in Javascript onAugust 06, 2020

1.先确认自己在route.js 或者 main.js 中有没有使用 路由守卫vue.beforeEach和vue.addRouters() 促使页面每次刷新,重新根据后台返回数据生成动态路由,就像你在登陆时做的事情一样。

代码示范注意点:

//注意:确定自己避免了路由守卫进入死循环
let oneRun = true; //通过oneRun变量控制 避免陷入死循环
router.beforeEach((to,from,next)=>{
  if(oneRun){
    oneRun = false;//必须在creatNewRouter() 执行
    createNewRouter();
    next({...to, replace: true})// 必不可少的,确保你的动态路由创建成功再去执行其它代码
  }
})
 
function createNewRouter(){
  //请在这里做你登陆之后所做的创建动态路由的事情 一模一样去做。
  //不要用缓存,session或localstorage 否则会报错。你需要重新发出请求 登陆怎么做的 这里就怎么做的
};

2. 如果你发现刷新之后成功了但回退发生了问题 请把路由模式切换成 history vue-route 默认使用hash模式。也就是地址上出现眨眼的 /#/ 当然 history模式本体跑没问题 发包后 需要后端配置 后端配置指导链接 把链接复制发2给后端同学即可。

3. 如果你想了解更多

1.为什么 用了缓存会失败? 这是因为当你存入缓存时候用了JSON.stringify 这东西 会改变 compoent对象 让它少了一个 render函数。这里你可以打印出来你缓存之后 又解析 出来的路由 比对一下 而 addRouters()要求它接受的数组参数必须严格符合路由规则。

2.next({...to, replace: true}) 为什么必不可少呢? 在hash模式下 你的动态路由可能还没创建完成就 跑其它代码了 毕竟 路由守卫是异步操作 在history模式下 可能没有这个问题 未实测 写上最好。

3.每次刷新发请求拿路由不合适?

继续缓存,但从缓存取出来路由之后,复写路由里面所有的compoent对象。复写方法很多,如递归遍历路由。然后 item.compoent = vueName; vueName也就是你导出来的vue文件变量。

补充知识:VUE 动态注入路由白屏,再次刷新才显示页面问题

问题描述:

由于系统需要动态注入路由,刚开始在路由拦截里面根据账号权限动态获取路由,然后注入到本地路由中,代码如下:

// 尝试获取本地 store 用户信息中权限字段
const hasRoles = store.getters.roles && store.getters.roles.length > 0
if (hasRoles) {
 next()
} else {
 try {
  // 用token换取用户信息
  store.dispatch('user/getInfo').then(roles => {
   if (!roles) new Error('roles error!')
   // 根据获取的用户权限映射对应的路由信息
   store.dispatch('permission/generateRoutes', roles).then(accessRoutes => {
    if (!accessRoutes) new Error('accessRoutes error!')
    // 动态加入路由
    router.addRoutes(accessRoutes)
    // 确保路由完整性,设置replace 为true 这样导航就不会留下历史记录。
    next({
     ...to,
     replace: true
    })
   })
  })
 } catch (error) {
  // 删除本地token 并且重新登陆
  await store.dispatch('user/resetToken')
  Message.error(error || 'Has Error')
  next(`/login?redirect=${to.path}`)
  NProgress.done()
 }
}

这样写只有在登陆之后刷新页面才会动态注入,解决办法就是在登陆之后执行一下 红色字体部分代码

以上这篇基于vue 动态菜单 刷新空白问题的解决就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个XML格式数据转换为图表的例子
Feb 09 Javascript
一个收集图片的bookmarlet(js 刷新页面中的图片)
May 27 Javascript
关于js类的定义
Jun 28 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
Jun 06 Javascript
js获得地址栏?问号后参数的方法
Aug 08 Javascript
js如何调用qq互联api实现第三方登录
Mar 28 Javascript
javascript中基本类型和引用类型的区别分析
May 12 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
Dec 21 Javascript
js判断PC端与移动端跳转
Dec 24 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
May 16 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
May 13 Javascript
JS指定音频audio在某个时间点进行播放
Nov 28 Javascript
基于JavaScript的数据结构队列动画实现示例解析
Aug 06 #Javascript
解决vue动态下拉菜单 有数据未反应的问题
Aug 06 #Javascript
JavaScript中ES6规范中let和const的用法和区别
Aug 06 #Javascript
在vue项目中利用popstate处理页面返回的操作介绍
Aug 06 #Javascript
JavaScript中作用域链的概念及用途讲解
Aug 06 #Javascript
解决vue字符串换行问题(绝对管用)
Aug 06 #Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
Aug 06 #Javascript
You might like
重料打造自己的“宝马”---第三代
2021/03/02 无线电
PHP 删除一个目录及目录下的所有文件的函数代码
2010/05/26 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
使用javascript实现Iframe自适应高度
2014/12/24 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
vue与TypeScript集成配置最简教程(推荐)
2017/10/17 Javascript
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
python动态参数用法实例分析
2015/05/25 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
django 实现celery动态设置周期任务执行时间
2019/11/19 Python
党校自我鉴定范文
2013/10/02 职场文书
应届大学生求职信
2013/12/01 职场文书
解除劳动合同证明书
2014/09/26 职场文书
科学育儿宣传标语
2014/10/08 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书
小学运动会开幕词
2015/01/28 职场文书
护士个人总结范文
2015/02/13 职场文书
刮痧观后感
2015/06/05 职场文书
关于保护环境的建议书
2019/06/24 职场文书