利用keep-alive实现列表页跳转到详情页,保留列表页的筛选条件

这篇博客介绍了如何在Vue应用中利用keep-alive组件,配合beforeRouteEnter和beforeRouteLeave钩子函数,以及EventBus事件总线,来实现在列表页跳转到详情页后,返回列表页时保持筛选条件、筛选结果和tab状态。博主首先尝试了直接使用keep-alive和路由钩子,但由于子组件无法触发这些钩子,于是转向了通过监听菜单点击事件触发页面刷新的方法。具体步骤包括在路由元信息中添加keepAlive标志,创建刷新方法,并在菜单选中时判断是否需要刷新页面,成功实现了需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用keep-alive实现列表页跳转到详情页,保留列表页的筛选条件

一、需求

从列表页跳转到详情页时,返回到列表页时,需要保留筛选条件、筛选结果、tab栏切换等数据

二、思路

方法1

刚开始想到用keep-alive结合beforeRouteEnter和beforeRouteLeave来实现,给需要缓存的页面添加keepAlive:true用来标识,具体的实现可以看keepAlive实现详情页返回列表页数据不刷新的文章

但是尝试之后发现,因为我的路由级组件里面是套用的子组件的,而beforeRouteEnter和beforeRouteLeave在子组件中是无法被触发的,如果一个个去给父组件添加beforeRouteEnter和beforeRouteLeave

再调用子组件中的初始化事件是有点不现实的

方法2

从自己项目特点入手,我的页面结构基本如下

左侧菜单栏是封装好的组件,然后整个页面主体页面封装了一个basicLayout作为统一导出页面,这样就想到了给要缓存的页面都用keepAlive:true标识,然后在左侧点击菜单栏的时候去调用下主体basicLayout的刷新方法就可以了

第一步:添加标识

第二步:给basicLayout刷新方法

利用v-if指令的特性,添加isRouterAlive实现组件刷新的功能,添加reload事件

因为左侧菜单栏和右侧主体页,属于“兄弟”组件,所有这里使用了EventBus去进行触发

第三步:在左侧菜单栏点击时触发reload事件

用的elementUI的munu组件,select菜单激活回调,返回选中菜单的index(路由路径)

这里做了个判断,当点击的菜单项已经是当前页,不做刷新

这样一系列下来,就能成功完成啦

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值