基于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 相关文章推荐
网页自动刷新,不产生嗒嗒声的一个解决方法
Mar 27 Javascript
js 实现无干扰阴影效果 简单好用(附文件下载)
Dec 27 Javascript
JavaScript的document对象和window对象详解
Dec 30 Javascript
ajax与302响应代码测试
Oct 23 Javascript
JavaScript+CSS控制打印格式示例介绍
Jan 07 Javascript
30个经典的jQuery代码开发技巧
Dec 15 Javascript
jQuery实现3D文字特效的方法
Mar 10 Javascript
纯javascript移动优先的幻灯片效果
Nov 02 Javascript
JS实现图片放大镜插件详解
Nov 06 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
Nov 21 Javascript
Vuex的基本概念、项目搭建以及入坑点
Nov 04 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
Jun 19 jQuery
基于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
PHP对字符串的递增运算分析
2010/08/08 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
2011/10/29 PHP
php判断ip黑名单程序代码实例
2014/02/24 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
对比分析json及XML
2014/11/28 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
Python操作Access数据库基本步骤分析
2016/09/19 Python
Python实现简单的语音识别系统
2017/12/13 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
Python装饰器模式定义与用法分析
2018/08/06 Python
Python实现不规则图形填充的思路
2020/02/02 Python
python 数据类型强制转换的总结
2021/01/25 Python
美国隐形眼镜网:Major Lens
2018/02/09 全球购物
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
大学生求职信范文应怎么写
2014/01/01 职场文书
车队司机个人自我鉴定
2014/04/17 职场文书
啦啦队口号大全
2014/06/16 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
MYSQL 表的全面总结
2021/11/11 MySQL
各种货币符号快捷输入
2022/02/17 杂记
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android