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中eval函数的使用方法与示例
Apr 09 Javascript
brook javascript框架介绍
Oct 10 Javascript
jquery parent和parents的区别分析
Oct 02 Javascript
JavaScript把数组作为堆栈使用的方法
Mar 20 Javascript
js限制文本框只能输入中文的方法
Aug 11 Javascript
Jquery on绑定的事件 触发多次实例代码
Dec 08 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
Feb 10 Javascript
react以create-react-app为基础创建项目
Mar 14 Javascript
JS实现遍历不规则多维数组的方法
Mar 21 Javascript
vue todo-list组件发布到npm上的方法
Apr 04 Javascript
JavaScript定时器使用方法详解
Mar 26 Javascript
js仿淘宝放大镜效果
Dec 28 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 socket(fsockopen)的应用实例分析
2013/06/02 PHP
php实现Linux服务器木马排查及加固功能
2014/12/29 PHP
php数组函数array_key_exists()小结
2015/12/10 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
js判断变量是否空值的代码
2008/10/26 Javascript
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
详解webpack多页面配置记录
2018/01/22 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
python中bisect模块用法实例
2014/09/25 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
TensorFlow实现Logistic回归
2018/09/07 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
Python3模拟登录操作实例分析
2019/03/12 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
目前不被任何主流浏览器支持的CSS3属性汇总
2014/07/21 HTML / CSS
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
咖啡厅创业计划书范本
2014/01/22 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
先进单位申报材料
2014/12/25 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL
Java 定时任务技术趋势简介
2022/05/04 Java/Android
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技