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 相关文章推荐
写出更好的JavaScript之undefined篇(上)
Nov 22 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
Oct 21 Javascript
javascript 小数取整简单实现方式
May 30 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
Jun 30 Javascript
JavaScript中的数组操作介绍
Dec 30 Javascript
Angular用来控制元素的展示与否的原生指令介绍
Jan 07 Javascript
详解ECharts使用心得总结
Dec 06 Javascript
JavaScript实现动态增删表格的方法
Mar 09 Javascript
微信小程序 实现点击添加移除class
Jun 12 Javascript
微信小程序授权获取用户详细信息openid的实例详解
Sep 20 Javascript
基于webpack 实用配置方法总结
Sep 28 Javascript
详细分析JavaScript中的深浅拷贝
Sep 17 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
PHP mkdir()定义和用法
2009/01/14 PHP
php 验证码实例代码
2010/06/01 PHP
php数组去重复数据示例
2014/02/25 PHP
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
Yii2如何批量添加数据
2016/05/17 PHP
php经典趣味算法实例代码
2020/01/21 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
用js闭包的方法实现多点标注冒泡示例
2014/05/29 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
深入学习js瀑布流布局
2016/10/14 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
Python银行系统实战源码
2019/10/25 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
python如何安装下载后的模块
2020/07/03 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
HTML5的Video标签有部分MP4无法播放的问题解析(多图)
2017/08/18 HTML / CSS
获奖的大学生创业计划书
2014/01/05 职场文书
应届生如何写自荐信
2014/01/05 职场文书
执行总经理岗位职责
2014/02/03 职场文书
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers