2.4 插槽slot的基本使用

  • slot的基本使用

最好的封闭方式就是将共性抽取到组件中,将不同暴露为插槽。

一旦我们预留了插槽,就可以让使用者根据自己的需求,决定插槽中插入什么内容。是搜索框还是文字还是菜单,由调用者自己来决定。

可以给插槽默认值,方法是在组件中的slot标签内写明默认内容。如果调用组件时没有指定插槽内容,将使用默认值。

<body>
	<div id="app">
			<!-- 在此处写入slot内容 -->
			<cpn><a href="#">slot替换的内容</a></cpn>
	</div>
	<template id="cpn">
		<div>
			<h1>我是子组件</h1>
			<!-- 预置slot,可以指定默认值  -->
			<slot><span>我是默认值</span></slot>
			<h1>子组件结束</h1>
		</div>
	</template>
	<script src="vue/vue.js" type="text/javascript" charset="utf-8"></script>
	<script type="text/javascript">
		const app=new Vue({
			el:'#app',
			components:{
				cpn:{
					template:'#cpn'
					}
				}
		})
	</script>
</body>

  • 具名插槽的使用

针对组件内有多个slot插槽的情况。通过具名决定替换那个插槽。

1.给插槽具名。给slot添加name属性。<slot name="one"></slot>

2.在组件标签内指定插槽内容时,根元素添加slot属性,属性值为name属性值。

<body>
	<div id="app">
			<!-- 在此处写入slot内容 -->
			<cpn><a slot="one" href="#">slot替换的内容</a></cpn>
	</div>
	<template id="cpn">
		<div>
			<h1>我是子组件</h1>
			<!-- 预置slot,可以指定默认值  -->
			<slot name="one"><span>我是默认值</span></slot>
			<h1>子组件结束</h1>
		</div>
	</template>
	<script src="vue/vue.js" type="text/javascript" charset="utf-8"></script>
	<script type="text/javascript">
		const app=new Vue({
			el:'#app',
			components:{
				cpn:{
					template:'#cpn'
					}
				}
		})
	</script>
</body>

  • 作用域插槽的使用

父组件替换插槽的标签,但是内容由子组件来提供。

1.组件slot标签中使用data属性绑定组件数据变量

2.在父中,子组件标签内,使用template标签,使其slot-scope属性等于任何变量名.

3.通过slot-scope属性的变量加data引用子组件中的数据。此处的data可以随意指定,只要引用时保持一致。

<body>
	<div id="app">
			<!-- 此处使用作用域插槽 -->
			<cpn>
				<template slot-scope="abc">
						<span v-for="item in abc.data">{{item}} --- </span>
				</template>
			</cpn>
			<cpn></cpn>
			<cpn></cpn>
	</div>
	<template id="cpn">
		<div>
			<slot :data="pLanguages">
				<ul>
					<li v-for="item in pLanguages">{{item}}</li>
				</ul>
			</slot>
		</div>
	</template>
	<script src="vue/vue.js" type="text/javascript" charset="utf-8"></script>
	<script type="text/javascript">
		const app=new Vue({
			el:'#app',
			components:{
				cpn:{
					template:'#cpn',
					data(){
						return {
							pLanguages:['C++','Java','PHP','QBasic']
						}
					}
					}
				}
		})
	</script>
</body>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值