vue 导航菜单刷新状态不消失,显示对应的路由界面操作


Posted in Javascript onAugust 06, 2020

使用vue element-ui框架构建公共导航栏(https://element.eleme.cn/#/zh-CN/component/menu)

按F5刷新就会返回默认定义的路由,使用 "$route.path" 刷新后还是在最新的一个路由:

<el-menu :default-active="$route.path"></el-menu>

vue 导航菜单刷新状态不消失,显示对应的路由界面操作

vue 导航菜单刷新状态不消失,显示对应的路由界面操作

补充知识:vue 动态菜单 刷新空白 解决方案

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 导航菜单刷新状态不消失,显示对应的路由界面操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 图片轮播(5张图片)
Dec 30 Javascript
Jquery判断IE6等浏览器的代码
Apr 05 Javascript
Javascript实现单张图片浏览
Dec 18 Javascript
JavaScript简单修改窗口大小的方法
Aug 03 Javascript
详解AngularJS中的http拦截
Feb 09 Javascript
JavaScript希尔排序、快速排序、归并排序算法
May 08 Javascript
Angular JS 生成动态二维码的方法
Feb 23 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
Sep 26 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
Jan 10 Javascript
Vue源码学习之关于对Array的数据侦听实现
Apr 23 Javascript
javascript开发实现贪吃蛇游戏
Jul 31 Javascript
解决antd的Form组件setFieldsValue的警告问题
Oct 29 Javascript
解决vue-router路由拦截造成死循环问题
Aug 05 #Javascript
Vue基于iview table展示图片实现点击放大
Aug 05 #Javascript
vue相同路由跳转强制刷新该路由组件操作
Aug 05 #Javascript
解决vue路由name同名,路由重复的问题
Aug 05 #Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
Aug 05 #Javascript
Vue 同步异步存值取值实现案例
Aug 05 #Javascript
详解vue路由
Aug 05 #Javascript
You might like
给多个地址发邮件的类
2006/10/09 PHP
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
php 无限级缓存的类的扩展
2009/03/16 PHP
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
2011/04/17 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
微信小程序 页面跳转传参详解
2016/10/28 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
vue实现文件上传功能
2018/08/13 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
Vue实现计算器计算效果
2020/08/17 Javascript
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
django定期执行任务(实例讲解)
2017/11/03 Python
python实现类之间的方法互相调用
2018/04/29 Python
Python 加密与解密小结
2018/12/06 Python
django query模块
2019/04/20 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
浅析NumPy 切片和索引
2020/09/02 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
css3通过scale()、rotate()实现放大、旋转
2020/03/19 HTML / CSS
促销活动策划方案
2014/01/12 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
python实现简单倒计时功能
2021/04/21 Python
jquery插件实现悬浮的菜单
2021/04/24 jQuery
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript
win10搭建配置ftp服务器的方法
2022/08/05 Servers