uni-app插槽slot用法 uni-app父子组件如何传递内容

千静酱_7862

千静酱_7862

2026-03-22

945人浏览

原创

slot 是 html 模板的内容占位符,不是数据传递机制或事件通信方式;父组件内容默认插入子组件 位置,需子组件显式声明且未被条件隐藏,否则被静默丢弃。

slot 是什么,不是什么

slot 不是数据传递机制,也不是事件通信方式,它只是 HTML 模板的“内容占位符”。父组件往子组件标签里写的任何内容,默认会被丢进子组件的 <slot></slot> 位置——前提是子组件显式写了 <slot></slot>。没写,内容就直接被丢弃,连 warning 都没有。

常见错误现象:
父组件写了内容,子组件却啥也没渲染出来。
原因几乎全是子组件模板里漏了 <slot></slot>,或者写了但被条件渲染(v-if)意外隐藏了。

  • uni-app 的 slot 和 Vue 2.6+ 一致,不支持作用域插槽的简写语法(v-slot:xxx 可用,#xxx 在 H5 和小程序平台表现不稳定,建议统一用 v-slot)
  • 微信小程序平台对具名 slot 名称敏感,只认小写字母 + 中划线(header、user-info),大写或下划线会失效
  • App 端(iOS/Android)和 H5 对 v-slot 支持良好,但 NVue 渲染模式下不支持具名 slot,只支持默认 slot

怎么传默认内容和具名内容

默认 slot 就是不带 name 的内容;具名 slot 要靠 name 属性配对。父子之间不传 props、不发事件,纯靠结构嵌套“塞进去”。

使用场景:封装按钮、卡片、表单布局等需要灵活定制内部结构的组件。

<!-- 父组件 -->
<my-card><view v-slot:header>用户信息</view><view v-slot:default>这里是主体内容</view><view v-slot:footer><button>确定</button></view></my-card>
<!-- 子组件 my-card.vue -->
<template><view class="card"><view class="header"><slot name="header"></slot></view><view class="body"><slot></slot></view><view class="footer"><slot name="footer"></slot></view></view></template>
  • v-slot:default 可省略为 v-slot 或直接不写(即裸写内容),但一旦用了具名 slot,所有非默认内容都必须显式声明 v-slot
  • 多个同名 v-slot 会按顺序覆盖,只保留最后一个;不要在同一个父组件里重复定义同一 name
  • 如果子组件想提供 fallback 内容(比如 slot 为空时显示提示),写成 <slot>暂无内容</slot> 即可

为什么 props + slot 经常一起用

slot 解决“长什么样”,props 解决“是什么”。比如一个列表项组件,用 props 传 title、avatar,用 slot 控制操作区怎么排版——二者分工明确,混用才自然。

容易踩的坑:
试图用 slot 传原始数据(如 <my-item>{{ item.name }}</my-item>),结果发现子组件拿不到 item 上下文 —— 因为 slot 内容是在父作用域编译的,子组件无法访问其内部变量,除非用作用域插槽。

  • 作用域插槽必须子组件主动暴露数据,通过 slot-scope(Vue 2)或 v-slot="scope"(Vue 2.6+ / uni-app)接收,不能反向“取”
  • uni-app 中,作用域插槽在小程序平台需注意:绑定的数据必须是响应式对象属性,直接传字面量(如 :data="123")会导致 scope 为空
  • App 端 NVue 下不支持作用域插槽,如有兼容需求,改用 props + 自定义事件组合替代

slot 在不同平台的实际表现差异

uni-app 编译到不同端时,slot 的解析时机和 DOM 结构生成逻辑不同,导致视觉或行为不一致。这不是 bug,是底层渲染机制差异。

典型问题:
微信小程序中 slot 内容可能被包裹多一层匿名节点(<wx-view></wx-view>),影响 CSS 选择器;H5 下则直接扁平插入。

  • 避免依赖 slot 外层 DOM 结构写 CSS,比如 .card > div 很可能在小程序里失效,改用类名控制更稳
  • 动态 slot(如配合 v-for 使用)在小程序里需确保 key 唯一且稳定,否则内容错乱或复用异常
  • 条件 slot(v-if="showHeader" v-slot:header)在部分小程序平台会触发 slot 初始化异常,建议把条件移到 slot 外部容器上

最麻烦的其实是调试:H5 控制台能看到 slot 编译后的结构,小程序开发者工具里得点开“wxml”面板逐层展开才能确认 slot 是否正确落位。这点很容易被忽略,直到上线后才发现内容没显示。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2483

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5363

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6410

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5998

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

863

5

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

2026.10.16

0

15

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

2026.10.16

0

15

Revel框架入门与安装配置
Revel框架入门与安装配置

本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。

2026.10.16

0

15

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

2026.10.15

0

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习