基于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 相关文章推荐
jquery简单实现滚动条下拉DIV固定在头部不动
Nov 25 Javascript
jquery选择checked在ie8普通模式下的问题
Feb 12 Javascript
百度判断手机终端并自动跳转js代码及使用实例
Jun 11 Javascript
浅析javascript的间隔调用和延时调用
Nov 12 Javascript
JavaScript将数字转换成大写中文的方法
Mar 23 Javascript
jquery实现图片水平滚动效果代码分享
Aug 26 Javascript
jQuery实现删除li节点的方法
Dec 06 Javascript
jQuery加载及解析XML文件的方法实例分析
Jan 22 Javascript
轻松学习Javascript闭包
Mar 01 Javascript
将angular.js项目整合到.net mvc中的方法详解
Jun 29 Javascript
微信小程序ibeacon三点定位详解
Oct 31 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
Feb 21 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
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
php实现根据url自动生成缩略图的方法
2014/09/23 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
深入理解PHP JSON数组与对象
2016/07/19 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
vue项目中应用ueditor自定义上传按钮功能
2018/04/27 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
Python Pandas 获取列匹配特定值的行的索引问题
2019/07/01 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
html5贪吃蛇游戏使用63行代码完美实现
2013/06/25 HTML / CSS
美国女孩服装购物网站:Justice
2017/03/04 全球购物
Lime Crime官网:美国一家主打梦幻精灵系的彩妆品牌
2019/03/22 全球购物
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
北承题目(C++)
2012/05/16 面试题
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
科级干部考察材料
2014/02/15 职场文书
爱情寄语大全
2014/04/09 职场文书
先进事迹演讲稿
2014/09/01 职场文书
导游词开场白
2015/01/31 职场文书
英语读书笔记
2015/07/02 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python
关于Python中进度条的六个实用技巧分享
2022/04/05 Python