具名插槽
app.vue
<template>
<div>
<BaseLayout>
<template v-slot:todo="{ todo }">
<span v-if="todo.isComplete">✓</span>
{{ todo.text }}
</template>
</BaseLayout>
</div>
</template>
BaseLayout.vue
<template>
<div>
<ul>
<li v-for="todo in filteredTodos" v-bind:key="todo.id">
<slot name="todo" :todo="todo">
<!-- 后备内容 -->
{{ todo.text }}
</slot>
</li>
</ul>
</div>
</template>
<script>
export default {
name: "BaseLayout",
data() {
return {
filteredTodos: [
{ id: "001", text: "aaa", isComplete: true },
{ id: "002", text: "bbb", isComplete: true },
{ id: "003", text: "ccc", isComplete: false },
{ id: "004", text: "ddd", isComplete: true },
{ id: "005", text: "eee", isComplete: true },
],
};
},
};
</script>
子组件中slot标签
下的name
属性后的todo
需要和父组件v-slot后的值相同(具名标签)。父组件等于号后面的这个todo
使用了解构赋值。
下面将每个todo
标号区分,标号相同的todo
意味着需要是一样的值。
从filterTodos
中取出todo3
将其绑定在todo2
上传递给父组件,父组件通过解构赋值获取了todo2
中的内容来使用。
父 : v-slot:todo1="{ todo2 }"
子 : <li v-for="todo3 in filteredTodos" v-bind:key="todo3.id">
<slot name="todo1" :todo2="todo3">