微信小程序-组件插槽默认内容失效在uni-app无法显示
微信小程序-组件插槽默认内容失效在uni-app无法显示
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win10 | HBuilderX |
| 4.85 | ||
| v1.06.2210310 | ||
| 3.12.1 |
产品分类:uniapp/小程序/微信
示例代码:
组件代码
<template>
<view>
<view>
<slot>
<view style="margin-bottom:20rpx;background-color:#000;color:#fff;height:100rpx">
默认插槽内容
</view>
</slot>
</view>
<view>
<slot name="textView">
<view style="margin-bottom:20rpx;background-color:#fbf;height:100rpx">
具名插槽内容
</view>
</slot>
</view>
</view>
</template>
<script setup>
</script>
<style>
</style>
页面代码
<template>
<view>
<view style="margin-bottom:20rpx">
无任何插槽内容
</view>
<componentView>
</componentView>
<button style="margin-bottom:20rpx" @tap="showNameSlot = !showNameSlot">{{showNameSlot ?'隐藏': '显示'}}插槽</button>
<view style="margin-bottom:20rpx">
if判断template标签显示插槽
</view>
<componentView>
<!-- <template #default v-if="showNameSlot">
<view style="margin-bottom:20rpx" >
新的默认插槽内容
</view>
</template> -->
<view style="margin-bottom:20rpx" >
新的默认插槽内容
</view>
<template #textView v-if="showNameSlot">
<view style="margin-bottom:20rpx">
新的具名插槽内容
</view>
</template>
</componentView>
<view style="padding:20rpx 0">
if判断在view标签显示插槽
</view>
<componentView>
<view style="margin-bottom:20rpx" v-if="showNameSlot">
新的默认插槽内容
</view>
<template #textView >
<view v-if="showNameSlot">
新的具名插槽内容
</view>
</template>
</componentView>
</view>
</template>
<script setup>
import componentView from './child/component.vue'
import {ref} from 'vue'
const showDefaultSlot = ref(false)
const showNameSlot = ref(false)
</script>
<style lang="scss">
</style>
操作步骤:
分别测试
单纯使用组件-结果正常
通过v-if控制是否显示自定义插槽内容-插槽默认内容失效
预期结果:
应正常显示插槽默认内容
实际结果:
插槽默认内容全部失效
bug描述:
小程序组件插槽默认内容,当页面使用组件插槽的方式是通过v-if判断时,默认内容就失效了,而单纯使用组件,不使用插槽时,默认内容是有效的
更多关于微信小程序-组件插槽默认内容失效在uni-app无法显示的实战教程也可以访问 https://www.itying.com/category-93-b0.html
该bug反馈内容完整,包含标题、详细描述、可运行代码示例、清晰复现步骤、合理预期与实际结果对比,以及分类信息(HBuilderX 4.85/Windows/微信小程序)。代码可直接运行,复现路径明确:单纯使用组件时默认插槽正常,但通过v-if控制插槽内容时默认内容失效。
经分析,该问题可能源于uni-app对小程序平台插槽实现的特殊处理。知识库明确说明插槽默认内容应在无内容提供时渲染,且编译作用域规则指出"父级模板内容在父级作用域编译"。用户代码中直接对默认插槽内容使用<view v-if="showNameSlot">的写法在标准Vue中应触发默认内容回退,但uni-app小程序平台可能存在条件渲染与插槽匹配的兼容性问题。
此非用户概念错误(写法符合Vue规范),但需注意:uni-app 4.85为较旧版本(当前最新正式版已更新),知识库未提及此为已知限制。建议用户先升级至最新HBuilderX版本验证,因历史版本存在小程序平台特殊实现差异。若问题仍存,需检查是否因v-if导致插槽节点判定异常,可尝试改用v-show或调整条件渲染位置作为临时方案。 内容为 AI 生成,仅供参考
更多关于微信小程序-组件插槽默认内容失效在uni-app无法显示的实战教程也可以访问 https://www.itying.com/category-93-b0.html
小程序不支持插槽内 显示默认信息 一直有这个问题 原生声小程序中也无法显示
参考文档:https://developers.weixin.qq.com/community/develop/doc/0008a04f2b0f289fa907b450b56000?highLine=<slot>不显示默认内容
这是一个已知的 uni-app 跨端编译问题。在微信小程序平台,当插槽内容使用 v-if 控制时,会导致默认插槽内容无法正常显示。
问题原因: uni-app 在编译到微信小程序时,对于条件渲染的插槽内容处理存在差异。微信小程序原生的 slot 机制在条件渲染场景下,无法正确回退到默认内容。
解决方案:
- 使用
v-show替代v-if(推荐):
<componentView>
<view style="margin-bottom:20rpx" v-show="showNameSlot">
新的默认插槽内容
</view>
<template #textView>
<view v-show="showNameSlot">
新的具名插槽内容
</view>
</template>
</componentView>
- 在组件内部处理条件渲染: 将条件判断移到组件内部,通过 props 控制:
<!-- 组件内部 -->
<slot>
<view v-if="!hasDefaultSlot">默认插槽内容</view>
</slot>
<!-- 页面使用 -->
<componentView :has-default-slot="showNameSlot">
<view v-if="showNameSlot">新的默认插槽内容</view>
</componentView>
- 使用计算属性动态返回插槽内容:
const slotContent = computed(() => {
return showNameSlot.value
? { default: () => h('view', '新的默认插槽内容') }
: null
})

