Vue默认插槽、具名插槽、作用域插槽的定义及使用方法


应用场景

插槽的作用是在子组件中某个位置插入父组件的自定义html结构data数据


三种插槽的定义

插槽分为三种:
默认插槽 具名插槽 作用域插槽

1.默认插槽
【定义:默认插槽是将父组件的结构和数据插入子组件中,默认插槽只有一个插入位置,要插入的html结构和data数据必须在父组件中,不过css可以在子组件中】
【简述:将父组件的自定义html和data插入子组件的对应位置】
【特点:父组件决定结构和数据】

2.具名插槽
【定义:具名插槽和默认插槽类似,只是默认插槽只有一个插入位置,具名插槽可以有多个插入位置】
【简述:将多个父组件的自定义html和data插入子组件的多个位置】
【特点:父组件决定结构和数据】

3.作用域插槽
【定义:作用域插槽的data数据固定写在子组件中,数据的html结构根据父组件传入的html结构来决定】
【简述:根据父组件中不同的html结构解析data中的数据】
【特点:子组件决定数据,父组件决定结构】


使用方法

1.默认插槽

父组件

<template>
	<Child> <!-- Child为子组件标签 -->
		<!-- 插槽内容 -->
		<template>要插入的html内容</template>
	</Child>
</template>

子组件

<template>
	<div>
		<!-- 插槽位置 -->
		<slot>插槽未被调用时会显示此内容</slot>
	</div>
</template>

2.具名插槽

父组件

<template>
	<Child> <!-- Child为子组件标签 -->
		<!-- 插槽内容 -->
		<template slot="header">要插入的html内容1</template>
		<template slot="center">要插入的html内容2</template>
		<template slot="footer">要插入的html内容3</template>
	</Child>
</template>

子组件

<template>
	<div>
		<!-- 插槽位置 -->
		<slot name="header">插槽未被调用时会显示此内容</slot>
		<slot name="center">插槽未被调用时会显示此内容</slot>
		<slot name="footer">插槽未被调用时会显示此内容</slot>
	</div>
</template>

3.作用域插槽

父组件

<template>
	<Child> <!-- Child为子组件标签 -->
		<!-- 插槽内容 -->
		<template slot="header">
			<span v-for="m in data.msg" :key="m"></span>
		</template>
		<template slot="center">
			<div v-for="m in data.msg" :key="m"></div>
		</template>
		<template slot="footer">
			<label v-for="m in data.msg" :key="m"></label>
		</template>
	</Child>
</template>

子组件

<template>
	<div>
		<!-- 插槽位置 -->
		<slot :msg="msg">插槽未被调用时会显示此内容</slot>
	</div>
</template>

<script>
	export default {
		name: 'Child',
		// 公用数据
		data() {
			return {
				msg: ["火锅", "红烧肉", "烤羊腿"]
			}
		}
	}
</script>

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Vue组件的插槽是一种抽象的概念,用于分发组件的内容。Vue提供了三种类型的插槽默认插槽具名插槽作用域插槽默认插槽是没有名字的插槽,可以在组件模板中使用<slot>标签来定义。当组件没有具名插槽时,所有没有被包裹在具名插槽中的内容都会被传递到默认插槽中。 具名插槽是有名字的插槽,可以在组件模板中使用<slot name="xxx">标签来定义。当组件中有多个插槽时,可以使用具名插槽来指定要分发的内容。 作用域插槽是一种特殊的插槽,可以让父组件向子组件传递数据。作用域插槽可以在组件模板中使用<slot>标签来定义,并且可以使用一个带有参数的函数来向插槽中传递数据。 例如,下面是一个使用作用域插槽的例子: ```html <template> <div> <slot v-bind:user="user"> {{ user.lastName }} </slot> </div> </template> <script> export default { data() { return { user: { firstName: 'John', lastName: 'Doe' } } } } </script> ``` 在父组件中,可以这样使用这个组件: ```html <template> <div> <user-profile> <template v-slot:default="slotProps"> {{ slotProps.user.firstName }} </template> </user-profile> </div> </template> <script> import UserProfile from './UserProfile.vue' export default { components: { UserProfile } } </script> ``` 这个例子中,父组件向子组件传递了一个名为user的数据对象,并且在插槽使用了一个带有参数的函数来向插槽中传递数据。在插槽中,可以使用slotProps来访问传递进来的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

什么都干的派森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值