vue 保持组件状态 不起作用 失效 keep-alive

本文详细介绍了Vue中如何使用keep-alive进行组件缓存,通过在<keep-alive>标签内包裹组件来实现。同时讨论了缓存失效的情况,当组件在不同的路由视图之间切换时,由于视口变化导致缓存失效的问题。并提供了示例代码展示如何配置include属性来指定缓存组件。最后,通过vuetools检查是否正确缓存组件。

前言

Vue组件实现缓存很简单,用keep-alive包起来要缓存的元素即可。

keep-alive用法

<keep-alive></keep-alive>,用来开关直接子元素,如果有多个条件性的子元素, 要求同时只有一个子元素被渲染。keep-alive跟transition一样,不会生成DOM;其include属性,用来指定要缓存组件的name,可以是字符串、数组、正则表达式,字符串可以用逗号隔开表示多个组件name;include会先匹配组件的name,如果name没有指定,那么匹配父组件中注册的名字(components中的名字)。实践中有个场景,左侧是导航栏,右侧是多个标签页,标签页都会渲染在同一个router-view中


Main.vue

//左侧导航栏
<LeftNavMenu></LeftNavMenu>
<keep-alive :include="includeArr">
	<router-view></router-view>
</keep-alive>

export default {
	data(){
		return {
		    //这个名字要与componentName1.vue中的name一致。
			includeArr:["componentName1"]
		}
	}
}

componentName1.vue

export default{
	name:"componentName1"
}

缓存组件失效情况

缓存组件失效的原因是缓存的视口不一样,如下

//App.vue
<template>
  <div id="app">
  //假如componentName1.vue、componentName2.vue会渲染在这个视口;那么这两个组件之间切换,
  会缓存,因为是同一个视口;
    <router-view ></router-view>
  </div>
</template>
//Main.vue
<template>
  <div id="main">
  //OtherComponent渲染在这个视口,
  那么从OtherComponent跳转到componentName1或者componentName2,OtherComponent都不会被缓存,
  因为视口不一样。
    <router-view ></router-view>
  </div>
</template>

能不能缓存,可以通过vue tools查看,
在这里插入图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值