news 2026/9/3 6:29:23

Vue-插槽 (Slot) 的多种高级玩法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue-插槽 (Slot) 的多种高级玩法

前言

在组件化开发中,插槽 (Slot)是实现内容分发(Content Distribution)的核心机制。它允许我们将组件的“外壳”与“内容”解耦,让组件具备极高的扩展性。

一、 什么是插槽?

插槽是子组件提供给父组件的“占位符”,用<slot></slot>标签表示。父组件传递的任何模板代码(HTML、组件等)都会替换子组件中的<slot>标签。

二、 插槽的三大类型

1. 默认插槽 (Default Slot)

最基础的插槽,不需要定义name属性。

  • 特点:一个子组件通常只建议使用一个默认插槽。
示例:
<!-- 子组件 --> <template> <div class="card"> <div class="card-title">通用卡片标题</div> <div class="card-content"> <slot> 这里是默认的填充文本 </slot> </div> </div> </template>
<!-- 父组件 --> <template> <div class="app"> <MyCard> 这是我传递给卡片的具体内容。 </MyCard> </div> </template>

2. 具名插槽 (Named Slots)

当子组件需要多个占位符时,通过name属性来区分。

  • 语法糖v-slot:header可以简写为#header
示例:
<!-- 子组件:LayoutComponent.vue --> <template> <div class="layout"> <header class="header"> <slot name="header"></slot> </header> <main class="content"> <slot></slot> </main> <footer class="footer"> <slot name="footer"></slot> </footer> </div> </template> <script setup lang="ts"> <!-- Vue 3 Composition API 模式下,逻辑部分可以保持简洁 --> </script>
<!-- 父组件使用示例 --> <template> <LayoutComponent> <template #header> <h1>页面标题</h1> <nav>导航菜单</nav> </template> <p>这是主体内容,将填充到默认插槽中...</p> <template #footer> <p>版权信息 &copy; 2026</p> </template> </LayoutComponent> </template> <script setup lang="ts"> import LayoutComponent from './LayoutComponent.vue'; </script>

3. 作用域插槽 (Scoped Slots)

核心价值“子传父”的特殊形式。子组件将内部数据绑定在<slot>上,父组件在填充内容时可以接收并使用这些数据。

示例:
<!-- 子组件:`UserList.vue` --> <template> <ul> <li v-for="user in users" :key="user.id"> <slot :user="user" :index="user.id"> {{ user.name }} </slot> </li> </ul> </template> <script setup lang="ts"> interface User { id: number; name: string; role: string; } const users: User[] = [ { id: 1, name: '张三', role: '管理员' }, { id: 2, name: '李四', role: '开发者' } ]; </script>
<!-- 父组件使用示例 --> <template> <UserList> <template #default="{ user }"> <span :style="{ color: user.role === '管理员' ? 'red' : 'blue' }"> {{ user.name }} - 【{{ user.role }}】 </span> </template> </UserList> </template>

三、 补充:插槽的默认内容

在子组件中,你可以在<slot>标签内部放置内容。如果父组件没有提供任何插槽内容,则会渲染这些“后备内容”;如果提供了,则会被覆盖。

<slot>这是如果没有内容时显示的默认文本</slot>

四、 总结:如何选择插槽?

插槽类型使用场景
默认插槽组件只有一个扩展点时使用。
具名插槽组件有多个固定区域(如 Header/Main/Footer)需要自定义时使用。
作用域插槽需要根据子组件的内部数据来决定父组件渲染样式的场景(如列表展示)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 23:51:21

工作14年,8年没换工作不会Java,之后学Java还是大模型?

工作14年&#xff0c;8年没换工作不会Java&#xff0c;之后学Java还是大模型&#xff1f; 工作14年且8年未换岗的经历&#xff0c;说明您具备较强的职业稳定性与领域专注度。针对当前技术趋势&#xff0c;建议分阶段规划&#xff1a; 1. 技术需求对比 维度Java技术栈大模型领…

作者头像 李华
网站建设 2026/9/3 1:38:33

R 数组:深入探索与高效使用

R 数组:深入探索与高效使用 引言 在R语言中,数组是处理数据的基本工具之一。它允许我们以结构化的方式存储和操作数据。本文将深入探讨R数组的定义、创建、操作以及在实际应用中的重要性。 数组的定义 数组是一组有序的元素集合,这些元素可以是相同或不同类型的。在R中,…

作者头像 李华
网站建设 2026/9/3 0:47:33

9款AI写论文哪个好?实测封神!宏智树AI凭真实素材碾压同级

作为深耕论文写作科普的教育测评博主&#xff0c;每年毕业季都要被粉丝追着问&#xff1a;“AI写论文到底靠不靠谱&#xff1f;9款热门工具实测&#xff0c;哪款能真正搞定毕业论文&#xff1f;” 为了帮大家避开“AI幻觉”“文献造假”“数据虚空”的坑&#xff0c;我花了15天…

作者头像 李华
网站建设 2026/9/2 23:03:03

宏智树 AI——ChatGPT 学术版驱动的一站式论文写作学术智能平台

宏智树 AI 是专为论文写作打造的专业学术写作辅助平台&#xff0c;依托ChatGPT 学术版模型核心驱动&#xff0c;搭载前沿AI5.0 技术架构&#xff0c;深耕学术写作全场景需求&#xff0c;打造从大纲生成到论文定稿的全链路智能解决方案。平台摒弃通用 AI 工具的泛用性短板&#…

作者头像 李华
网站建设 2026/9/3 5:50:31

【开题答辩全过程】以 基于javaweb的音乐节管理系统为例,包含答辩的问题和答案

个人简介 一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等 开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。 感谢大家…

作者头像 李华
网站建设 2026/9/3 0:47:27

2025CRM 品牌厂商排行榜:六款主流系统全链路能力对比,附选型指南

六款主流CRM/管理系统核心能力横向对比&#xff1a;从客户到供应链的全链路数字化考量在企业数字化转型中&#xff0c;客户管理、销售提成、生产物料、库存盘点、多维度分析是支撑业务全链路的五大核心模块。不同行业&#xff08;制造/零售/跨境/营销&#xff09;、不同规模&am…

作者头像 李华