当前位置: 首页 > news >正文

Vue 插槽(Slot)完全指南

插槽是 Vue 中组件内容分发的机制,让父组件可以向子组件传递 HTML 内容

一、为什么需要插槽?

<!-- 子组件 Card.vue --> <div class="card"> <div class="header">标题</div> <div class="body">内容</div> </div> <!-- 父组件使用 --> <Card /> <!-- 只能显示固定的内容,不够灵活 -->

插槽的作用:让父组件可以自定义子组件内部的内容

二、三种插槽类型

类型说明数量使用场景
默认插槽没有名字的插槽1个单一内容区域
具名插槽有名字的插槽多个多个不同位置
作用域插槽可以传递数据的插槽多个子组件数据需要父组件决定如何渲染

三、默认插槽(Default Slot)

父组件使用

<Child> <p>这是父组件传入的内容</p> </Child>

子组件定义

<!-- Child.vue --> <div class="card"> <div class="header">卡片标题</div> <div class="body"> <!-- 默认插槽:父组件传入的内容会显示在这里 --> <slot></slot> </div> </div>

渲染结果

<div class="card"> <div class="header">卡片标题</div> <div class="body"> <p>这是父组件传入的内容</p> </div> </div>

默认内容(后备内容)

<!-- 子组件:提供默认内容 --> <slot>默认显示的内容</slot>
<!-- 父组件:不传内容时显示默认 --> <Child /> <!-- 显示"默认显示的内容" --> <Child>自定义内容</Child> <!-- 显示"自定义内容" -->

四、具名插槽(Named Slot)

当子组件有多个不同位置需要填充时,使用具名插槽。

父组件使用(Vue 3 语法)

<Card> <template #header> <h2>自定义头部</h2> </template> <template #default> <p>自定义主体内容</p> </template> <template #footer> <button>确认</button> <button>取消</button> </template> </Card>

子组件定义

<!-- Card.vue --> <div class="card"> <div class="header"> <slot name="header">默认头部</slot> </div> <div class="body"> <slot>默认内容</slot> </div> <div class="footer"> <slot name="footer">默认底部</slot> </div> </div>

简写对照

完整写法简写说明
v-slot:header#header常用
v-slot:default#default默认插槽
v-slot:footer#footer具名插槽

五、作用域插槽(Scoped Slot)

作用域插槽让子组件可以向父组件传递数据,父组件根据这些数据决定如何渲染。

父组件使用

<Table :data="userList"> <!-- 接收子组件传递的数据 --> <template #row="{ rowData, index }"> <div class="custom-row"> <span class="index">{{ index + 1 }}</span> <span class="name">{{ rowData.name }}</span> <span class="age">{{ rowData.age }}岁</span> </div> </template> </Table>

子组件定义

<!-- Table.vue --> <template> <div class="table"> <div v-for="item in data" :key="item.id" class="row"> <!-- 把 item 传递给父组件 --> <slot name="row" :rowData="item" :index="index"> <!-- 默认显示方式 --> {{ item.name }} </slot> </div> </div> </template> <script setup> const props = defineProps(['data']) const data = props.data </script>
http://www.jsqmd.com/news/621654/

相关文章:

  • 距离矢量路由算法实战:如何用Python模拟网络路由更新过程(附代码)
  • 嵌入式IMU类型契约库:统一欧拉角、四元数与惯性消息定义
  • SAP ABAP开发小技巧:用SE38里的Text Elements和图标库,5分钟打造高颜值选择屏幕
  • 西门子200PLC与显控触摸屏智能污水处理控制系统
  • 从Excel到智能化,一文讲透背后的逻辑与选型思路:企业管理绩效考核系统
  • 2-4有关项目‘基于音乐喜好的智能选型平台’中间层建立
  • 如何利用SQL视图实现模块化报表_逻辑分层实现
  • 当AI学会编程,我们还能做什么蔽
  • 如何睡眠等待_DBMS_LOCK.SLEEP与DBMS_SESSION暂停当前会话
  • 泛微OA与企业微信集成:打造高效通知公告提醒系统
  • 电商客服+导购智能体的设计与开发晒
  • iOS插件化
  • 腾讯地图自定义瓦片地图开发实战:从坐标定位到图层融合
  • Kali Linux实战:如何用MSFconsole实现Windows屏幕监控(附详细命令清单)
  • 木卫二(欧罗巴)的潜在生命迹象与探测计划
  • 推特怎么快速涨粉?2026最新实战技巧全解析(附自动化工具推荐)
  • 2026年靠谱的粉体计量秤/流量计量秤品牌厂家推荐 - 品牌宣传支持者
  • 推荐开源项目:Swift中的Core Data数据同步神器 —— Sync
  • 2026年智慧人才管理系统正在淘汰传统HR:你的企业准备好了吗
  • 内容敏感已删除
  • 激光SLAM之Gmapping(2)参数调优与实战技巧
  • 2026西南角铁供应商排行:成都方管、成都槽钢、成都焊管、成都角钢、成都角铁、成都钢材、成都钢板、成都镀锌管、四川H型钢选择指南 - 优质品牌商家
  • 阐述与标签:岐金兰视域下的孟子人性论研究批判
  • jQuery Tooltip:深入解析与最佳实践
  • RAdam在计算机视觉任务中的应用:图像分类、目标检测等场景的最佳实践
  • SpringBoot3+SaToken+JWT:微服务架构下的统一认证与鉴权方案
  • 阿姆智创15.6寸嵌入式工控一体机,赋能机器视觉与产线数字化生产
  • 26年4月10日复盘总结,大盘方向,操作建议,板块个股机会,实用干货
  • 好用的绩效考核软件怎么选?2026年主流产品深度对比与场景推荐
  • 2026年大型洗车机定制技术解析:通过式洗车机定制、隧道式洗车机定制、龙门洗车机定制、24小时全自动洗车机厂家选择指南 - 优质品牌商家