16 Vue 中动态组件与 v-once 指令实践

一、Vue中动态组件写在前面的例子,这个未使用动态组件。只是引出动态组件。

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Title</title>
		<script src="../vue.js"></script>
		
	</head>
	<body>
		<div id="app">

			<child-one v-if="type === 'child-one' "></child-one>
			<child-two v-if="type === 'child-two' "></child-two>
			<!-- 当点击change按钮时,会改变child-one和child-two 是否显示 -->
			<button @click='handleClick'>change</button>
			
		</div>

		<script type="text/javascript">
			Vue.component('child-one',{
				template:"<div>child-one</div>"
			})
			Vue.component('child-two',{
				template:"<div>child-two</div>"
			})

			var vm = new Vue({
				el: "#app",
				data:{
					type: 'child-one'
				},
				methods:{
					handleClick:function() {
						this.type = this.type ==='child-one' ?"child-two":"child-one"
					}
				}
			})
		</script>

	</body>
</html>

点击 chang按钮时,改变 child-one和child-two两个值。

 二 、使用动态组件  componet :is="type"  简化,父组件的代码

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Title</title>
		<script src="../vue.js"></script>
		
	</head>
	<body>
		<div id="app">
			<!-- 动态组件,type动态决定显示那个子组件 -->
			<componet :is="type"></componet>
			<!-- <child-one v-if="type === 'child-one' "></child-one>
			<child-two v-if="type === 'child-two' "></child-two> -->
			<!-- 当点击change按钮时,会改变child-one和child-two 是否显示 -->
			<button @click='handleClick'>change</button>
			
		</div>

		<script type="text/javascript">
			Vue.component('child-one',{
				template:"<div>child-one</div>"
			})
			Vue.component('child-two',{
				template:"<div>child-two</div>"
			})

			var vm = new Vue({
				el: "#app",
				data:{
					type: 'child-one'
				},
				methods:{
					handleClick:function() {
						// 三目运算符,如果this.type ==='child-one' 则返回child-two否则显示 child-one
						this.type = this.type ==='child-one' ?"child-two":"child-one"
					}
				}
			})
		</script>

	</body>
</html>

三、加入 v-once 每次创建完成后放到内存中,再次创建时在内存中获取,这样就提升了性能。

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Title</title>
		<script src="../vue.js"></script>
		
	</head>
	<body>
		<div id="app">
			<!-- 动态组件,type动态决定显示那个子组件 -->
			<!-- <componet :is="type"></componet> -->
			<child-one v-if="type === 'child-one' "></child-one>
			<child-two v-if="type === 'child-two' "></child-two>
			<!-- 当点击change按钮时,会改变child-one和child-two 是否显示 -->
			<button @click='handleClick'>change</button>
			
		</div>

		<script type="text/javascript">
			// div 上加入了v-once 指令,在每次创建 完成后就会放到内存中。再切换过来时就不需要再创建新的组件
			Vue.component('child-one',{
				template:"<div v-once>child-one</div>"
			})
			// div 上加入了v-once 指令,在每次创建 完成后就会放到内存中。
			Vue.component('child-two',{
				template:"<div v-once>child-two</div>"
			})

			var vm = new Vue({
				el: "#app",
				data:{
					type: 'child-one'
				},
				methods:{
					handleClick:function() {
						// 三目运算符,如果this.type ==='child-one' 则返回child-two否则显示 child-one
						this.type = this.type ==='child-one' ?"child-two":"child-one"
					}
				}
			})
		</script>

	</body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值