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预载入和JavaScript Image()对象使用介绍
Aug 28 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
Mar 24 Javascript
JavaScript实现仿网易通行证表单验证
May 25 Javascript
jquery动态切换背景图片的简单实现方法
May 14 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 Javascript
jquery easyui DataGrid简单示例
Jan 23 Javascript
解决webpack打包速度慢的解决办法汇总
Jul 06 Javascript
elementUI table表格动态合并的示例代码
May 15 Javascript
vue请求服务器数据后绑定不上的解决方法
Oct 30 Javascript
详解JavaScript中new操作符的解析和实现
Sep 04 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
Oct 22 Javascript
JavaScript使用setTimeout实现倒计时效果
Feb 19 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
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
php对mongodb的扩展(初出茅庐)
2012/11/11 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
Yii快速入门经典教程
2015/12/28 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
php图像生成函数之间的区别分析
2012/12/06 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
django rest framework 过滤时间操作
2020/07/12 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
汽车专业毕业生推荐信
2013/11/12 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
2014年纪检工作总结
2014/11/12 职场文书
小学生大队委竞选稿
2015/11/20 职场文书