基于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 相关文章推荐
js实现页面打印功能实例代码(附去页眉页脚功能代码)
Dec 15 Javascript
一些主流JS框架中DOMReady事件的实现小结
Feb 12 Javascript
js中方法重载如何实现?以及函数的参数问题
Aug 01 Javascript
JS获取url链接字符串 location.href
Dec 23 Javascript
javascript屏蔽右键代码
May 15 Javascript
jQuery实现首页图片淡入淡出效果的方法
Jun 10 Javascript
谈谈我对JavaScript DOM事件的理解
Dec 18 Javascript
JavaScript生成二维码图片小结
Dec 27 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
Jan 04 Javascript
Vue实现带进度条的文件拖动上传功能
Feb 23 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
Jul 31 Javascript
js中关于Blob对象的介绍与使用
Nov 29 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木马攻击防御之道
2008/03/24 PHP
php在线代理转向代码
2012/05/05 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
JS中的this变量的使用介绍
2013/10/21 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
浅谈angularJS 作用域
2015/07/05 Javascript
Java中Timer的用法详解
2015/10/21 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
python中多个装饰器的执行顺序详解
2018/10/08 Python
python安装pil库方法及代码
2019/06/25 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
Python图像读写方法对比
2020/11/16 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
文言文形式的学生求职信
2013/12/03 职场文书
婚礼主持词
2014/03/13 职场文书
战友聚会致辞
2015/07/28 职场文书
《假如》教学反思
2016/02/17 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
PHP实现两种排课方式
2021/06/26 PHP
Python编写nmap扫描工具
2021/07/21 Python