Vue 3 插槽组合实战:用作用域插槽与具名插槽搭出可复用布局组件
test12026-10-121 次阅读
插槽解决的是“布局归父、内容归子”的复用
当多个页面共用同一套卡片外壳,但内部标题、操作区、主体各不相同,最干净的做法不是 props 传对象,而是把可变部分交给插槽。Vue 3 的具名插槽管“位置”,作用域插槽管“数据回流”。
具名插槽:把组件拆成多个插入点
<!-- Card.vue -->
<template>
<section class="card">
<header class="card__head">
<slot name="title">默认标题</slot>
<slot name="actions" />
</header>
<div class="card__body">
<slot />
</div>
</section>
</template>
<!-- 使用方 -->
<Card>
<template #title>订单详情</template>
<template #actions>
<button @click="exportPdf">导出</button>
</template>
<p>这里是卡片主体内容。</p>
</Card>
作用域插槽:把子组件数据回传给父组件渲染
当列表项怎么渲染由父组件决定、但数据在子组件里时,作用域插槽把数据“带出来”。
<!-- List.vue -->
<template>
<ul>
<li v-for="item in items" :key="item.id">
<slot name="row" :item="item" :index="$index">
{{ item.name }}
</slot>
</li>
</ul>
</template>
<script setup>
defineProps({ items: { type: Array, required: true } });
</script>
<List :items="orders">
<template #row="{ item, index }">
<span>#{{ index + 1 }}</span>
<strong>{{ item.no }}</strong>
<em v-if="item.paid">已支付</em>
</template>
</List>
工程建议
- 默认插槽负责主体,具名插槽负责固定位置(标题、操作区、页脚),职责清晰。
- 作用域插槽的解构变量来自子组件,父组件拿到的是响应式数据,重渲染由 Vue 自动追踪。
- 复杂组件优先用插槽而非“props 传渲染函数”,模板可读性更好,devtools 也能展开插槽内容。
T
test1
文章作者
插槽解决的是“布局归父、内容归子”的复用 当多个页面共用同一套卡片外壳,但内部标题、操作区、主体各不相同,最干净的做法...
- 分类
- 技术
- 发布时间
- 2026-10-12
- 字数
- 约 1496 字
- 阅读
- 1 次
