• 父级组件中使用 ​​ <A> </A>​​ 并且不提供任何插槽内容时,子组件中 ​​<slot></slot>​​标签中的内容当作默认内容展示。
  • v-slot 只能添加在 ​​<template​​(一种情况除外,当被提供的内容只有默认插槽时,组件的标签才可以被当作插槽的模板来使用。这样我们就可以把 v-slot 直接用在组件上。
  • 缩写, ​​v-slot:​​ 替换为字符 #。例如 v-slot:header 可以被重写为 #header。
  • 默认插槽的缩写语法不能和具名插槽混用,因为它会导致作用域不明确。
  • 多个插槽,要始终为所有的插槽使用完整的基于​​ <template​

匿名插槽

父组件:
<A>
这是xxxxx数据
这是yyyyy数据
</A>

子组件:
<header>
<div>头部</div>
<slot></slot>
</header>

<footer>
<div>底部</div>
<slot></slot>
</footer>

具名插槽

父组件:      
<A>
<template v-slot:xxx>
这是xxxxx数据
</template>

<template v-slot:yyy>
这是yyyyy数据
</template>
</A>

***简写:<template #xxx>

子组件:
<header>
<div>头部</div>
<slot name='xxx'></slot>
<slot name='yyy'></slot>
</header>

作用域插槽

  • 绑定在 ​​<slot > ​​元素上的 attribute 被称为插槽 prop。现在在父级作用域中,我们可以使用带值的 v-slot 来定义我们提供的插槽 prop 的名字,当然也可以直接解构,以下我直接使用解构。
  • 使用解构时,可以重新命名,例如将 data 重命名为 item:
父组件:
<template v-slot='{data}'>
{{ data.name }} --> {{ data.age }}
</template>

简写:<template #default='{data}'>

子组件:
<div v-for='item in list' :key='item.id'>
<slot :data='item'></slot>
</div>
<script setup>
const list = ref([
{name:"张三",age:"21"},
{name:"李四",age:"22"},
{name:"王五",age:"23"},
])
</script>

动态插槽

父组件:
<template #[xxx]>
这是xxxxx数据
</template>

<script setup>
let xxx = ref('xxx');
</script>