vue项目实现列表页-详情页返回不刷新,再点其他菜单项返回刷新的需求

  问题背景:有时候一些列表会有一些跳转的需求,比如跳到详情页、或者是其他相关的页面(比如跳到用户列表去查看用户的相关信息)等,此时再返回列表页,列表页会刷新重置。目前需求就是需要改成如下情况:

  问题1、列表 - 详情页,返回,不刷新重置;

  问题2、再点其他菜单,再返回,需要刷新重置。

  解决思路:

  解决需求自然是想到vue的keep-alive去缓存组件,但是缓存组件有个不好的弊端,就是以后再进入页面也一直保持着上一次浏览的状态,那么如果我们有很多查询条件的情况,或者比如 route/:id 这种动态路由匹配的情况,那么页面就不会重新加载。

  对于这个需求,组里人员意愿倾向于全部缓存页面,利用 keep-alive 的include、exclude属性去缓存需要缓存的页面;然后对于如果有特殊需要刷新页面的查询参数,比如动态路由的那种情况,就利用watch或activated去解决。个人认为这种解决方案既繁琐,又不易维护。

  所以一直再想一个通用的方案。我一直的思路就是:

  1、利用路由的meta信息增加:meta: {keepAlive: true}

  2、利用路由的beforeRouteLeave,如果跳出去的页面是需要返回不刷新页面的路由(如详情、用户列表),那么就给当前路由meta.keepAlive = true,否则设为false

beforRouteLeave (to, from, next) {if (['orderDetaiInfo'].includes(to.name)) {from.meta.keepAlive = true} else {from.meta.keepAlive = false}next()
}

  3、然后在app.vue里面去控制

<el-container class="app app_console" v-else-if="$route.fullPath != '/'"><WHeader></WHeader><el-container class="forIE"><WMenu></WMenu><keep-alive><router-view v-if="$route.meta.keepAlive"></router-view><router-view v-else :key="activeQuery"></router-view></keep-alive><img class="material" src="./assets/commonImages/pattern.png" height="240"></el-container></el-container>

  当时想的也比较简单,需要缓存的时候就走的keepAlive为true的view,再回来就会缓存不刷新了。当跳至其他菜单后,其keepAlive就置为false了,那么再返回时就走的下面有key值刷新的view了。

  问题完成一半,测试发现一个问题:

  上面问题背景的1、2是可以很好的解决了,但是却出现第3个问题:

  问题3:问题1、2之后再点击详情,再返回,却不是刚刚那个页面,而是之前缓存的页面。

  原因:问题3的此时,该页面比如order页的meta的keepAlive此时是false的,那我在order当前页面进入的时候去改变为true,依然不会有效果,原因就是我们上面是形成了2个view,我们缓存的是上面那个view,就算改成true了,再返回时也是去的上面那个view,所以是返回之前缓存的页面,很惆怅。

  解决方案其实也很简单,那么就是想法让从其他菜单,再进入当前order时,让进入的view变成keepAlive的就行了。

  当时一直没想到一个好的方案,就只想到利用go(0),让页面重进一次,这样确实解决了问题3,但是体验不好。一度妥协去用watch,但是今天突然想到我可以利用一个blank空的页面去承接一下keepAlive的false的情况,相当于利用blank页面去达到go(0),让页面重进的目的,但是体验又不会刷新,由于是空页面,所以几乎看不出问题。

  就写下简单方案:keep-alive,beforeRouteLeave,vuex,blank.vue

  1、vuex存一个keepAlive控制什么情况进入blank页面

  什么情况呢?(1)keepAlive为false;(2)需为那些需要缓存的页面,也就是加了meta.keepAlive为true的路由。否则没加的那些路由也都会走进blank页,影响结果。

<el-container class="app app_console" v-else-if="$route.fullPath != '/'"><WHeader></WHeader><Blank v-if="!keepAlive && ['orderList'].includes($route.name)"></Blank><el-container v-else class="forIE"><WMenu></WMenu><keep-alive><router-view v-if="$route.meta.keepAlive"></router-view><router-view v-else :key="activeQuery"></router-view></keep-alive><img class="material" src="./assets/commonImages/pattern.png" height="240"></el-container></el-container>

  2、beforeRouteLeave的时候,如果调整其他菜单项,那么就给vuex的keepAlive置为false,让下次再进入order的时候,进入blank页面

  3、在blank页面进行处理:(1)修改当前order页面meta.keepAlive为true;(2)修改vuex的keepAlive为true,促使重新进入下面的缓存页面。

  这样就大功告成了。只是自己大致测了一下,优化暂未考虑。

转载于:https://www.cnblogs.com/goloving/p/10445624.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轮廓检测_轮廓检测| Richer Convolutional Features | CVPR | 2017

0 概述论文名称&#xff1a;“Richer Convolutional Features for Edge Detection”论文链接&#xff1a;https://openaccess.thecvf.com/content_cvpr_2017/papers/Liu_Richer_Convolutional_Features_CVPR_2017_paper.pdf缩写&#xff1a;RCF这一篇文论在我看来&#xff0c;是…

NodeJS开发环境配置

为什么80%的码农都做不了架构师&#xff1f;>>> 上链接&#xff5e; http://www.cnblogs.com/Irving/p/3634232.html 转载于:https://my.oschina.net/weiyi/blog/287177

python各种类型转换-int,str,char,float,ord,hex,oct等

int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符串 eval(str ) 用来计算在字符串中的有效Python表达式,并返…

一个平行四边形可以分成四个_将平行四边形分割成两个三角形还易变形么?(人教四下五单元三角形例2)...

最近&#xff0c;我学了三角形一课&#xff0c;研究了三角形的特性。课上我们拿出准备好的拼搭的三角形和平行四边形&#xff0c;动手拉一拉&#xff0c;结果发现三角形拉不动、平行四边形一拉就变形了。原来动动手也是研究数学呀&#xff0c;太有意思了&#xff01;这时&#…

Java中利用MessageFormat对象实现类似C# string.Format方法格式化

我们在写C#代码的时候常常会使用到string.Format("待格式化字符串{0},{1},....",参数1,参数2,...)&#xff0c;来格式化字符串&#xff0c;特别是拼接字符的时候&#xff0c;这种方式使得代码更为直观清楚。 最近使用java时候却java的string.Format与c#重点string.Fo…

配置redis三主三从

主从环境 centos7.6 redis4.0.1 主从192.168.181.139:6379192.168.181.136:6379192.168.181.136:6380192.168.181.137:6380192.168.181.137:6381192.168.181.139:6381集群实例配置 这里展示192.168.181.139:6379节点的&#xff0c;其他配置修改ip、端口号和文件名 bind 192.168…

加个属性让div成纵向横向无缝滚动(支持IE和FF)

<!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"> <head> <title>无缝div(纵向,横向滚动)(s…

tensorflow 模型小型化_模型小型化

实习终于结束了&#xff0c;现把实习期间做的基于人体姿态估计的模型小型化的工作做个总结。现在深度学习模型开始走向应用&#xff0c;因此我们需要把深度学习网络和模型部署到一些硬件上&#xff0c;而现有一些模型的参数量由于过大&#xff0c;会导致在一些硬件上的运行速度…

css多行超出时,超出高度,显示省略号

.layoutdisplay: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 2;overflow: hidden;转载于:https://www.cnblogs.com/cx709452428/p/10457182.html

设计模式系列漫谈之二 - 工厂方法模式

故事 10月1日是小雪的生日。许多追求者都想在生日那天给小雪一份意想不到的惊喜&#xff0c;并且表达自己的爱意。这些追求者绞尽脑汁的为小雪发送一个比较有创意的祝福短信。看来&#xff0c;小雪今年的生日过得肯定非常幸福。但是&#xff0c;小雪的手机还是比较特别&a…

谁控制了我们的浏览器?

http://www.baidu.com/link?url4Qw_a5JHvJi8NPp7of9HqRWN93EPxC2Vy9CPxm3e-KgcO443jRRS_1jzcWDAF8qf5oPPwipv0D6BRQf5XMNi1a 本文遵从GPL协议&#xff0c;欢迎转载。 1、现象是什么&#xff1f; 大约从今年年初开始&#xff0c;很多人就发现&#xff0c;在浏览一些网站的时候&…

java面试题大全答案版文库_java高级面试题带答案

java高级面试题&#xff0c;java面试题大全带答案&#xff0c;线程面试题&#xff0c;java面试宝典20191、[请对以下在J2EE中常用的名词进行解释(或简单描述)](http://www.wityx.com/post/172_1_1.html)2、[socket通信](http://www.wityx.com/post/175_1_1.html)3、[简述线程的…

SP1693 COCONUTS - 题解

SP1693 COCONUTS 题意&#xff1a; 几个士兵在投票&#xff0c;有支持与反对两种选择&#xff0c;每个人有自己的看法&#xff0c;但是他们有时也会为了支持朋友的看法而放弃自己的看法&#xff0c;请求出一种方案&#xff0c;使得违背自己初始看法的人数与看法不一致的朋友对数…

最近特忙

昨天上午上课&#xff0c;中午开支部大会&#xff0c;下午学院职工会议&#xff0c;晚上去东联蛇餐馆吃蛇肉&#xff0c;回来后参加体验英语月闭幕式及英语合唱表演决赛。这中间我还出去给我的论文小组快了一个讨论会。昨天共开了三个会&#xff0c;真是忙得天昏地暗&#xff0…

NoSQL系列:选择合适的数据库

NoSQL系列&#xff1a;选择合适的数据库 为什么使用NoSQL数据库&#xff1f; 阻抗失衡 关系模型和内存中的数据结构不匹配 采用更为方便的数据交互方式提升开发效率 待处理的数据量很大 数据量超过关系型数据库的承载能力 大集群的出现 在成本方面&#xff0c;集群中应用关系数…

mysql历史日志文件_MySQL 历史 binlog 日志处理

MySQL 历史 binlog 日志处理一、问题的引出MySQL binlog 如果不清理会占用服务器的空间,那么怎么处理binlog日志呢二、解决办法1、物理删除df -Th 查看磁盘空间➜ bobbob-pc ~ df -Th文件系统 类型 容量 已用 可用 已用% 挂载点udev devtmpfs 7.8G 0 7.8G 0% /devtmpfs tmpfs 1…

史上最全搞怪WC标志(组图)--设计者太有才了。

转载于:https://www.cnblogs.com/onlyzq/archive/2007/12/22/1010318.html

1 vmware 如何联网,以及行命令令初步

VMware安装Linux&#xff08;我安装的是ubuntu&#xff09;&#xff0c;没法上网&#xff0c;上网教程见&#xff1a;https://blog.csdn.net/qq_28090573/article/details/78730552 安装完成Linux&#xff0c;进入系统&#xff0c;显示的是图形界面&#xff0c;但是学习Linux&a…

mysql几个timeout参数_MySQL中 timeout相关参数解析

前言&#xff1a;MySQL中有两个关于连接超时的配置项。他们之间在某些条件下会互相继承&#xff0c;那究竟这两个参数会在什么情况下起作用呢&#xff1f;本文将会通过一些测试实例来证明总结两者的相互关系。参数介绍&#xff1a;The number of seconds the server waits for …

XML操作类

publicclassXmlControl:Object { protectedstringstrXmlFile; protectedXmlDocument objXmlDoc newXmlDocument(); publicXmlControl(stringXmlFile, Boolean bOverWrite, stringsRoot) { try{ //如果覆盖模式&#xff…