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

vue3插槽详解

默认插槽

默认插槽是最基本的插槽类型,用于接收父组件传递的任意内容。

子组件 (ChildComponent.vue)

<template><div><h2>子组件标题</h2><!-- 默认插槽 --><slot></slot></div>
</template><script setup>
// Composition API 不需要额外代码处理默认插槽
</script>

父组件使用

<template><ChildComponent><p>这是插入到默认插槽的内容</p></ChildComponent>
</template><script setup>
import ChildComponent from './ChildComponent.vue'
</script>

具名插槽

具名插槽允许你有多个插槽,并通过名称区分它们。

子组件 (NamedSlots.vue)

<template><div><header><slot name="header"></slot></header><main><slot></slot> <!-- 默认插槽 --></main><footer><slot name="footer"></slot></footer></div>
</template><script setup>
// 不需要额外代码处理具名插槽
</script>

父组件使用

<template><NamedSlots><template v-slot:header><h1>这是头部内容</h1></template><p>这是默认插槽的内容</p><template v-slot:footer><p>这是页脚内容</p></template></NamedSlots>
</template><script setup>
import NamedSlots from './NamedSlots.vue'
</script>

作用域插槽

作用域插槽允许子组件向插槽传递数据,父组件可以访问这些数据。

子组件 (ScopedSlot.vue)

<template><ul><li v-for="item in items" :key="item.id"><!-- 向插槽传递数据 --><slot :item="item" :index="index"></slot></li></ul>
</template><script setup>
import { ref } from 'vue'const items = ref([{ id: 1, name: '项目1' },{ id: 2, name: '项目2' },{ id: 3, name: '项目3' }
])
</script>

父组件使用

<template><ScopedSlot><!-- 使用解构语法接收作用域数据 --><template v-slot="{ item, index }">{{ index + 1 }}. {{ item.name }}</template></ScopedSlot>
</template><script setup>
import ScopedSlot from './ScopedSlot.vue'
</script>

动态插槽名

Vue 3 支持动态插槽名

<template><DynamicSlot><template v-slot:[dynamicSlotName]>动态插槽内容</template></DynamicSlot>
</template><script setup>
import { ref } from 'vue'const dynamicSlotName = ref('header')
</script>

使用 useSlots() 来访问插槽内容

<script setup>
import { useSlots } from 'vue'const slots = useSlots()// 检查某个插槽是否存在
if (slots.header) {console.log('header 插槽存在')
}
</script>

http://www.dtcms.com/a/304133.html

相关文章:

  • Python之禅
  • mac 字体遍历demo
  • 《林景媚与命运解放者》
  • OpenCV 学习探秘之四:从角点检测,SIFT/SURF/ORB特征提取,目标检测与识别,Haar级联分类人脸检测,再到机器学习等接口的全面实战应用与解析
  • MySQL(配置)——MariaDB使用
  • 2025北京师范大学数学分析考研试题
  • 15-C语言:第15~16天笔记
  • FreeRTOS在中断上下文中设置事件组,调度很慢的的解决方法
  • 智慧工地系统:科技如何重塑建筑现场?
  • macOS “Sploitlight“漏洞曝光:攻击者可窃取Apple Intelligence缓存数据
  • 用动态的观点看加锁
  • 新升级超值型系列32位单片机MM32G0005
  • C++类中动态内存分配注意手册
  • python新手,学习计划
  • 每日一题7.29
  • 当贝纯净版_海信ip811n海思mv320处理器安卓4.42及9.0主板优盘免拆刷机固件及教程
  • [Token]ALGM: 基于自适应局部-全局token合并的简单视觉Transformer用于高效语义分割, CVPR2024
  • 安卓逆向2-安卓刷机和获取root权限和安装LSPosed框架
  • 博物馆 VR 导览:图形渲染算法+智能讲解技术算法实现及优化
  • 想要批量提取视频背景音乐?FFmpeg 和转换器都安排上
  • 机器学习、深度学习与数据挖掘:三大技术领域的深度解析
  • centos7安装Docker
  • 机器学习、深度学习与数据挖掘:核心技术差异、应用场景与工程实践指南
  • Docker学习相关视频笔记(二)
  • Linux 系统启动与 GRUB2 核心操作指南
  • 7月29日星期二今日早报简报微语报早读
  • Ubuntu上开通Samba网络共享
  • Ubuntu22.04系统安装,Nvidia显卡驱动安装问题
  • RHCE综合项目:分布式LNMP私有博客服务部署
  • Ubuntu25.04轻量虚拟机Multipass使用Shell脚本自动创建并启动不同版本Ubuntu并复制文件