Vue动态组件和缓存组件

一、动态组件----component

        在开发中经常会有切换选项卡的业务需求,实现的方法有很多种,其中动态组件也是一种方式。动态组件有一个属性“is”,属性值可以是一个字符串,但里面的内容与组件名字一致。也可以通过绑定变量的方式在数据源中进行取值,根据业务需要决定显示哪一个组件。

<script>
	import box from "./components/out.vue"
	import box2 from "./components/out_son.vue"
	import box3 from "./components/box3.vue"
	export default {
		data() {
			return {
				comp:'box',
				box3
			}
		},
		components: {
			box,box2,box3
		},
		methods: {
			fn(arg){
				this.comp = arg
			}
		}
	}
</script>
<template>
	<div>
		<button @click="fn('box')">首页</button>
		<button @click="fn('box2')">加入我们</button>
		<button @click="fn('box3')">社区</button>
		<!-- 不加引号传递的参数则是组件对象 -->
		<!-- <button @click="fn(box3)">社区</button> -->
	</div>
	<!--1、以直接的属性值方式,等号后面是字符串,但这个字符串与注册的组件名一致,显示box组件 -->
	<!-- <component is='box'></component> -->
	<!-- 2、以绑定变量的方式,根据业务需要在数据源中取不同的值来显示不同的组件 -->
	<component :is='comp'></component>
	
    <!-- <keep-alive>
		<component :is='comp'></component>
	</keep-alive> -->
</template>

        点击切换的时候执行了3个生命周期函数:先是原本的组件的beforeUnmount、unmounted,然后才是切换到的那个组件的mounted。

        这种方式存在着一个问题,就是切换之后再切回来,原本输入的内容就不存在了。这时候就有了缓存组件,用以解决这个问题。

二、缓存组件----keep-alive

       用于缓存动态组件或者组件的状态,以减少组件的销毁和重新创建带来的性能损耗。这时动态组件必须嵌套在缓存组件中,这样就能够在切换之后保留原本输入的内容。添加了缓存组件之后,beforeUnmount、unmounted函数就不执行了,执行了另外两个函数,activated和deactivated。它们两个是keep-alive组件的两个生命周期钩子函数。这两个钩子函数会在包裹的组件切换到活动状态(被缓存后再次激活)和非活动状态(被缓存后离开活动状态)时被触发。

        如果需要有的组件缓存,有的不缓存。则需要用到缓存组件的两个属性:include、exclude,等号后面的名字与各组件的name属性匹配,name与data同级。exclude='box',box组件不缓存,其他都缓存。include='box',box组件缓存,其他都不缓存。

<keep-alive include='box'>
    <component :is='comp'></component>
</keep-alive>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值