1、什么是 Vue 插槽?

        Vue 插槽(Slot)​​ 是 Vue 提供的一种非常强大且灵活的机制,用于实现:父组件向子组件传递一段模板内容(HTML / 组件等),让子组件在指定位置动态渲染这些内容。

        可以把插槽理解为:

  • 子组件定义了一个 ​​“内容占位符”​​
  • 父组件可以在使用子组件时,​往这个占位符里插入自定义内容

2、插槽的作用

        在组件化开发中,常常封装一些可复用的组件,比如:

  • Card(卡片)
  • Button(按钮)
  • Modal(弹窗)
  • Layout(布局)

        但这些组件内部某些部分的内容可能是不固定的,比如:

  • 卡片组件中的内容文本
  • 导航栏中的菜单项
  • 弹窗中的主体内容

        这时候,如果写死组件内部的 DOM 结构,会缺乏灵活性;

插槽就是用来解决这种“内容动态化”的问题,让组件更加灵活和可复用!​

3、插槽的基本使用(默认插槽)

        1、子组件(带插槽占位符) ChildComponent.vue

<!-- ChildComponent.vue -->
<template><div class="card"><h3>这是一个卡片标题</h3><!-- 插槽占位符:父组件可以在这里插入任意内容 --><slot></slot></div>
</template><style scoped>
.card {border: 1px solid #ccc;padding: 20px;border-radius: 8px;
}
</style>

        2、父组件(向子组件传入内容)

<template><ChildComponent><!-- 这里的内容会被插入到子组件的 <slot> 位置 --><p>这是父组件传入的内容,会显示在子组件的插槽位置!</p></ChildComponent>
</template><script setup>
import ChildComponent from './ChildComponent.vue'
</script>

结果:

        子组件中的 <slot></slot> 会被替换为父组件写在 <ChildComponent> 标签内部的 HTML 内容。

4、具名插槽(Named Slots)

        当一个组件中有多个插槽位置时,我们需要给每个插槽起个名字,这就是具名插槽

        1、子组件(定义多个具名插槽)BaseLayout.vue

<!-- BaseLayout.vue -->
<template><div class="layout"><header><!-- 具名插槽:header --><slot name="header"></slot></header><main><!-- 默认插槽(没有名字的) --><slot></slot></main><footer><!-- 具名插槽:footer --><slot name="footer"></slot></footer></div>
</template>

        2、父组件(向不同插槽传入内容)

<template><BaseLayout><!-- 往 name="header" 的插槽传内容 --><template #header><h1>这是页面头部</h1></template><!-- 默认插槽(没有 name 的,直接写内容也可以) --><p>这是页面的主要内容区域</p><!-- 往 name="footer" 的插槽传内容 --><template #footer><p>© 2025 我的网站</p></template></BaseLayout>
</template><script setup>
import BaseLayout from './BaseLayout.vue'
</script>

注意:**#header 是 <template v-slot:header> 的简写形式(Vue 2.6+ 推荐)​**​

        Vue 2.6 之前写法

<template slot="header"><h1>>这是页面头部</h1>
</template><template slot="footer"><p>© 2025 我的网站</p>
</template>

5、作用域插槽(Scoped Slots)

        作用域插槽是一种更高级的插槽用法,允许子组件向父组件传递数据,让父组件可以基于子组件的数据来渲染插槽内容。

        举例:

封装了一个列表组件,列表的数据是由子组件管理的,但每一项的内容希望由父组件自定义

        1、子组件(传递数据给插槽)UserList.vue

<!-- UserList.vue -->
<template><ul><li v-for="user in users" :key="user.id"><!-- 作用域插槽:将 user 数据传递给父组件 --><slot :user="user"></slot></li></ul>
</template><script setup>
import { ref } from 'vue'// 模拟数据
const users = ref([{ id: 1, name: 'Alice' },{ id: 2, name: 'Bob' },{ id: 3, name: 'Charlie' }
])
</script>

        2、父组件(使用子组件,并接收子组件传递的数据)

<template><UserList><!-- 使用 v-slot 或 # 接收子组件传递的 user 对象 --><template #default="slotProps"><span>{{ slotProps.user.name }}</span></template></UserList>
</template><script setup>
import UserList from './UserList.vue'
</script>

slotProps 是一个对象,包含子组件传递出来的所有数据(比如这里的 user

        Vue 2.6+推荐的简写方式:这样写更简洁,直接解构 user

<template><UserList><!-- 简写:#default="user" --><template #default="{ user }"><div>ID: {{ user.id }} - Name: {{ user.name }}</div></template></UserList>
</template>

        或者给插槽起名字(比如叫 item):

        子组件:

<slot name="item" :user="user"></slot>

        父组件:

<template #item="{ user }"><div>{{ user.name }}</div>
</template>

6、推荐使用场景

场景推荐插槽类型
卡片、弹窗、布局组件的内容区域默认插槽
页面头部、导航、页脚等分区具名插槽
列表项、表格单元格、下拉选项等需要自定义内容作用域插槽

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93288.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93288.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93288.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 - Embedded IDE - GCC - 显著减少固件的体积

导言如上图所示&#xff0c;在编译器附加选项&#xff08;全局&#xff09;里添加--specsnano.specs&#xff0c;告诉编译器使用newlib-nano替代newlib去编译代码。 newlib vs. newlib-nano newlib 是 GNU ARM 工具链默认的 C 标准库&#xff0c;功能完整&#xff0c;但体积较大…

python的美食交流社区系统

前端开发框架:vue.js 数据库 mysql 版本不限 后端语言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 数据库工具&#xff1a;Navicat/SQLyog等都可以 摘要&…

《Redis持久化机制对比与RDB/AOF调优方案》

&#x1f4da; Redis持久化机制对比与RDB/AOF调优方案 &#x1f9e0;前言 在生产环境中&#xff0c;Redis 常常被用作缓存&#xff0c;但在更多场景下&#xff0c;它还存储着核心业务数据&#xff08;如会话、订单、队列任务等&#xff09;。一旦 Redis 宕机、数据丢失&#…

eXtremeDB 医疗设备开发实战:从合规到实时,构建 EN62304 级数据管理系统

在医疗设备开发领域&#xff0c;数据管理的 “可靠性” 与 “合规性” 是不可逾越的红线 —— 监护仪心率数据的丢失可能延误诊断时机&#xff0c;胰岛素泵剂量记录的错误则直接威胁患者生命安全。eXtremeDB 凭借对 EN62304 标准的深度合规支持、硬实时数据处理能力及多层次安全…

linux 设备驱动的分层思想

一、 概述像这样的分层设计在linux的input、RTC、MTD、I2c、SPI、tty、USB等诸多类型设备驱动中屡见不鲜,下面对这些驱动进行详细的分析。二、 输入设备驱动输入设备&#xff08;如按键、键盘、触摸屏、鼠标等&#xff09;是典型的字符设备&#xff0c;其一般的工…

【嵌入式硬件实例】-555定时器驱动直流无刷电机

555定时器驱动直流无刷电机 文章目录 555定时器驱动直流无刷电机 1、555定时器介绍 2、BLDC,无刷直流电机 3、DRV10866 驱动器 4、硬件准备与接线 5、电路工作原理 在这个项目中,我们将使用 555 定时器 IC 和 DRV10866 驱动器 IC 制作 BLDC、无刷直流电机驱动电路。无刷电机可…

Helm 常用命令 + Bitnami 中间件部署速查表

文章目录一、Helm 常用命令速查表1.1. 仓库管理1.2. Chart 搜索1.3. 应用部署1.4. 应用管理二、Bitnami 常用中间件部署示例三、常用自定义参数&#xff08;values.yaml 配置项&#xff09;四、安装后的访问方式五、一键安装脚本 install-middleware.sh5.1. 完整脚本5.2. 使用方…

Ansible 自动化运维实战系列(六):Valut详解

Ansible 自动化运维实战系列&#xff08;六&#xff09;&#xff1a;Valut详解&#x1f4da; 系列导航一&#xff1a;概述二&#xff1a;命令1&#xff09;创建加密文件2&#xff09;加密已有文件3&#xff09;查看加密文件4&#xff09;编辑加密文件5&#xff09;解密文件6&am…

《探秘浏览器Web Bluetooth API设备发现流程》

网页若需与蓝牙设备通信,往往需依赖本地客户端或专用驱动程序作为中介,不仅增加了用户操作成本,也限制了Web应用在跨设备场景中的拓展。而Web Bluetooth API的出现,直接赋予了网页与低功耗蓝牙(BLE)设备对话的能力,从智能手环的健康数据同步,到智能家居设备的远程控制,…

Jenkins+Python自动化持续集成详细教程

Python接口自动化测试零基础入门到精通&#xff08;2025最新版&#xff09;Jenkins安装 ​ Jenkins是一个开源的软件项目&#xff0c;是基于java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续…

C++面试——内存

一、简述堆和栈的区别维度栈&#xff08;Stack&#xff09;堆&#xff08;Heap&#xff09;生命周期随函数调用自动创建/销毁由程序员或垃圾回收器控制分配速度极快&#xff08;仅移动指针&#xff09;慢&#xff08;需查找空闲块、维护元数据&#xff09;空间大小较小&#xf…

UVM验证(三)—UVM机制(1)

目录 &#xff08;一&#xff09;Factory工厂机制 1. 工厂机制核心逻辑&#xff1a;“注册 - 创建 - 覆盖” 2. 代码映射&#xff1a;从概念到实现 3. 实验目标&#xff1a;用 dadd_fixen_driver 固定 data_en1 4. 工厂机制的价值&#xff1a;“灵活验证的基石” 5. 常见…

前往中世纪 送修改器(Going Medieval)免安装中文版

网盘链接&#xff1a; 前往中世纪 免安装中文版 名称&#xff1a;前往中世纪 送修改器&#xff08;Going Medieval&#xff09;免安装中文版 描述&#xff1a; 在Going Medieval的世界中&#xff0c;黑暗时代的社会已濒临崩溃。14世纪末瘟疫肆虐&#xff0c;全球95%的人口因…

Font Awesome 参考手册

Font Awesome 参考手册 引言 Font Awesome 是一个功能强大的图标库,它允许开发者通过简单的 CSS 类来添加图标到网页中。本手册旨在为开发者提供全面的 Font Awesome 使用指南,包括图标选择、样式定制以及常见问题解答。 图标选择 图标分类 Font Awesome 提供了多种类别…

源网荷储一体化零碳智慧工业园区建设

针对传统工业园区等电力消纳大户存在的供电模式单一、能源管理错杂、园区人员设备安全统筹不到位等诸多问题&#xff0c;通过AI分析及物联网等新技术和自研交直流关键设备的应用&#xff0c;在三维场景中构建集智慧能源、智慧安防、碳排放管理及智慧运营等功能于一体的新型零碳…

MySQL表操作(DDL)

MySQL表操作创建表查看表结构修改表结构增加一列删除一列修改某一列的属性修改某一列的名字修改某一列的属性和名字插入几条信息删除表创建表 语法&#xff1a; CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collat…

【总结】Python多线程

【总结】Python多线程备注一、基本概念二、备注 2025/08/15 星期五 最近用到了python的多线程发现和其他语言有点不同记录一下 一、基本概念 首先要理解一下线程、进程和协程的概念 线程&#xff08;Thread&#xff09;&#xff1a;是计算机能够调度的最小计算单位 进程&…

【c++深入系列】:万字详解模版(下)

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 成功没有标准答案&#xff0c;但坚持永远是必选项 ★★★ 本文前置知识&#xff1a; 模版(上&#xff09; 那么在之前的文章中我们展示…

Docker部署美化SunPanel导航页

使用Cloudflare Tunnels穿透的地址:星霜导航 由于是使用的iStore里面的SunPanel导航页,只是基本的功能 页脚配置 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" conte…

支持向量机的原理和案例解析

支持向量机的原理和案例解析一、支持向量机的核心目标&#xff1a;间隔最大化步骤1&#xff1a;定义分离超平面步骤2&#xff1a;定义样本到超平面的距离&#xff08;间隔&#xff09;步骤3&#xff1a;间隔最大化的目标步骤4&#xff1a;简化目标函数二、通过拉格朗日乘子法求…