基于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 相关文章推荐
javascript的onchange事件与jQuery的change()方法比较
Sep 28 Javascript
js 与或运算符 || && 妙用
Dec 09 Javascript
javascript document.execCommand() 常用解析
Dec 14 Javascript
js 图片随机不定向浮动的实现代码
Jul 02 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
Sep 03 Javascript
jQuery操作动态生成的内容的方法
May 28 Javascript
前端常见跨域解决方案(全)
Sep 19 Javascript
JS实现的数组去除重复数据算法小结
Nov 17 Javascript
详解如何用webpack4从零开始构建react开发环境
Jan 27 Javascript
jQuery提示框插件SweetAlert用法分析
Aug 05 jQuery
JavaScript canvas绘制圆弧与圆形
Feb 18 Javascript
vue3获取当前路由地址
Feb 18 Vue.js
基于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
PHP4实际应用经验篇(7)
2006/10/09 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
解析arp病毒背后利用的Javascript技术附解密方法
2007/08/06 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
React组件中的this的具体使用
2018/02/28 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
Python通过poll实现异步IO的方法
2015/06/04 Python
Python 3.x读写csv文件中数字的方法示例
2017/08/29 Python
python使用fork实现守护进程的方法
2017/11/16 Python
django反向解析URL和URL命名空间的方法
2018/06/05 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
大学生志愿者感言
2014/01/15 职场文书
大学生交通专业求职信
2014/09/01 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
毕业生党员个人总结
2015/02/14 职场文书
施工安全责任协议书
2016/03/23 职场文书