uni-app 微信小程序组件slot嵌套导致默认判断异常问题

uni-app 微信小程序组件slot嵌套导致默认判断异常问题

开发环境 版本号 项目创建方式
Mac 15.6.1 HBuilderX

产品分类:uniapp/小程序/微信


示例代码:

组件aaa
<template>  
    <view>  
        <text>我是App1</text>  
        <bbb>  
            <slot></slot>  
        </bbb>  
    </view>  
</template>
组件bbb
<template>  
    <view>  
        <text>我是App2</text>  
        <slot> app2 default </slot>  
    </view>  
</template>
page
例1:  
<aaa></aaa>  

例2:  
<aaa>覆盖默认内容</aaa>

更多关于uni-app 微信小程序组件slot嵌套导致默认判断异常问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

web端爆栈了

更多关于uni-app 微信小程序组件slot嵌套导致默认判断异常问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


不好意思,刚刚改了,附件已经更新了,麻烦再看看

回复 叫我白老师: 试试原生微信小程序支不支持这种slot写法

这是一个典型的组件嵌套场景下的 slot 作用域问题。

在例1中,<aaa></aaa> 没有传递任何内容:

  • 组件 aaa 内部的 <slot></slot> 没有接收到内容
  • 但组件 bbb 中的 <slot> app2 default </slot> 会显示默认内容 “app2 default”

在例2中,<aaa>覆盖默认内容</aaa>

  • 组件 aaa 的 slot 接收到 “覆盖默认内容”
  • 这个内容传递给组件 bbb 的 slot
  • 最终显示 “覆盖默认内容” 而不是 “app2 default”

问题分析: 当组件嵌套时,slot 内容会逐层传递。外层组件的 slot 内容会成为内层组件 slot 的默认内容。在 uni-app 中,如果内层 slot 有默认内容,只有当外层 slot 完全为空时才会显示。

解决方案: 如果需要精确控制默认内容的显示逻辑,建议:

  1. 在组件 bbb 中使用 $slots 判断是否有内容传入
  2. 或者在外层组件 aaa 中显式传递空内容来触发默认显示
<!-- 组件bbb优化 -->
<template>  
    <view>  
        <text>我是App2</text>  
        <slot v-if="$slots.default"></slot>
        <text v-else>app2 default</text>  
    </view>  
</template>
回到顶部