1. 备用内容(默认内容)
<slot>
DEMO
</slot>
<TestSlot1 />
<TestSlot1>
Save // 这里有值会覆盖默认值
</TestSlot1>
2. 具名插槽
<div class="container">
<header>
<slot name="header"></slot>
</header>
<main>
<slot></slot>
</main>
<footer>
<slot name="footer"></slot>
</footer>
</div>
<TestSlot2>
// 使用插槽
<template #header>
// 这里可以是字符串、标签也可以是组件
<h1>具名插槽</h1>
</template>
<template #default>
<p>A paragraph for the main content.</p>
<p>And another one.</p>
</template>
<template #footer>
<p>Here's some contact info</p>
</template>
</TestSlot2>
3. 作用域插槽
<div lass="container">
<!-- 作用域插槽 -->
<ul>
<li
v-for="( item, index ) in items"
:key="index"
>
<slot
:item="item"
:index="index"
></slot>
</li>
</ul>
</div>
setup () {
const items = ['Feed a cat', 'Buy milk']
return {
items
}
}
<TestSlot3>
<template #default="slotProps">
<p>{{ slotProps.item }}</p>
<p>{{ slotProps.index }}</p>
</template>
<template #default="{ item, index }">
<p>{{ item }}</p>
<p>{{ index }}</p>
</template>
<template #default="{ item: todo, index: getIndex }">
<p>{{ todo }}</p>
<p>{{ getIndex }}</p>
</template>
<template #default="{ item = 'Placeholder' }">
<p>{{ item }}</p>
</template>
</TestSlot3>