Keep-Alive中通过component多次加载同样的动态组件无法保持状态的解决办法

Keep-Alive中通过component多次加载同样的动态组件无法保持状态的解决办法

Keep-Alive中通过component多次加载同样的动态组件无法保持状态的解决办法 | 软件开发服务商 (yidianhulian.com)icon-default.png?t=N7T8https://yidianhulian.com/?p=12263

问题描述

项目功能上有需要动态添加组件的需求,比如tab标签功能,动态添加标签,同时添加后的标签在切换时需要保存状态,自然而然想到了keep-alive,这就有了下面的代码:

tabPage 定义方式1:

通过components事先定义好所有会加载的组件:

tagPage 通过ref或computed的方式判断当前的标签的类型并返回:

这个时候keep-alive是工作的,但这里的问题是:

动态创建的组件有多个是同一个组件,比如APIAdd,

由于keep alive的缓存机制是通过组件名称来缓存的,同一个组件被打开多次的话其实显示的还是第一次打开的那个,这和我们实际的应用场景不符合,不能缓存界面状态(比如表单中输入的内容)

tabPage 定义方式2:

为了解决方式1中的同名组件只能加载一次的问题,需要同一个组件被加载多次,只是里面展示的内容不一样,所以tabPage通过defineAsyncComponent异步加载:

这里组件能加载成功,同名组件每次创建标签都会生成一个新的,但是这里的问题是:

没有起到keep-alive的效果,已经加载的组件,在切换时又重新创建了组件, 状态自然也没有得到保存,

解决办法:

为了解决同一个组件可以被动态加载多次,同时需要能keep-alive,解决的办法就是不用component,而是把所有动态添加的组件都各自放在一个keep-alive中,根据条件切换显示即可:

这样每个组件都可以加载自己的数据,并且可以keep alive保存状态:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值