Vue 中的作用域插槽

作用域插槽。

首先,定义一个组件:

	<div id="root">
		<child></child>
	</div>
	<script>
		Vue.component("child",{
			template: '<div>child</div>'
		})
		var vm = new Vue({
			el: "#root"
		})
	</script>

 

需要在子组件中循环显示一个列表:

	<div id="root">
		<child></child>
	</div>
	<script>
		Vue.component("child",{
			data: function(){
				return {
					list: [1,2,3,4,5]
				}
			},
			template: `<div>
						<ul>
						  <li v-for="item of list">{{item}}
						  </li>
						</ul>
					   </div>`
		})
		var vm = new Vue({
			el: "#root"
		})
	</script>

但是,当我们希望li 的样式由外部使用组件的地方定义,因为可能有多种地方要使用该组件,但样式希望不一样。那么,需要把li 改为slot 。

如下,代码。其中 template 必须要加的,是一个固定写法,template 中必须有 slot-scope 属性,该属性的值,可以自己起。而在子组件中传递的数据(item)则在slot-scope 中。

	<div id="root">
		<child>
			<template slot-scope="props">
				<li>{{props.item}} - hello</li>
			</template>
		</child>
	</div>
	<script>
		Vue.component("child",{
			data: function(){
				return {
					list: [1,2,3,4,5]
				}
			},
			template: `<div>
						<ul>
						  <slot v-for="item of list" :item=item>
						  </slot>
						</ul>
					   </div>`
		})
		var vm = new Vue({
			el: "#root"
		})
	</script>

作用域插槽,使用场景: 子组件做循环显示,或者子组件的某一部分由外部指定的时候,就使用作用域插槽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值