直接编译
- 发布:2025-11-06 16:34
- 更新:2025-11-06 17:31
- 阅读:81
产品分类: uniapp/小程序/微信
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: x64
HBuilderX类型: 正式
HBuilderX版本号: 4.85
第三方开发者工具版本号: 1.06
基础库版本号: 3.9.3
项目创建方式: HBuilderX
操作步骤:
预期结果:
<view wx:for="{{a}}" wx:for-item="item" wx:key="c"><slot name="{{item.a}}"></slot></view>
<view wx:for="{{a}}" wx:for-item="item" wx:key="c"><slot name="{{item.a}}"></slot></view>
实际结果:
<view wx:for="{{a}}" wx:for-item="item" wx:key="c"><slot name="{{item.a}}"></slot><slot></slot></view>
<view wx:for="{{a}}" wx:for-item="item" wx:key="c"><slot name="{{item.a}}"></slot><slot></slot></view>
bug描述:
<view v-for="(item, index) in dataList" :key="item.id" >
<slot :data="item"></slot>
</view>
编译成微信小程序多了一个<slot></slot>
<view wx:for="{{a}}" wx:for-item="item" wx:key="c"><slot name="{{item.a}}"></slot><slot></slot></view>
导致报错
More than one slot named "" are found inside a single component instance (in component "components/test-slot"). The first one was accepted.
临时解决方案
找到 HX根目录/Contents/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-mp-compiler/dist/template/codegen.js
搜索 function genNode(node, context)
在上面添加以下代码
function isInVFor(node) {
while (node) {
if ((0, vFor_1.isForElementNode)(node)) {
return true;
}
node = node.parent;
}
return false;
}
搜索 const isVIfSlot = (0, vIf_1.isIfElementNode)(node)
在上面添加
if (isInVFor(node)) {
return genSlot(node, context);
}
找到 HX根目录/Contents/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-mp-compiler/dist/transform.js
搜索 context.parent = parent;
在上面添加 child.parent = parent;
筝筝日上 (作者)
好像都是一个问题, 现在还没修复
2025-11-06 16:52
筝筝日上 (作者)
编译过的微信小程序删除一下多余的<slot></slot>就不警告了, 但是太费劲了, 写插件也不能让用户都手动删一下
2025-11-06 16:54
jgj_app
回复 2***@qq.com: view 改成template 标签试试
2025-11-06 16:57
筝筝日上 (作者)
回复 jgj_app: 也不行
2025-11-06 17:03
jgj_app
回复 2***@qq.com: 那就慢慢等他们修复
2025-11-06 17:08
DCloud_UNI_JBB
回复 2***@qq.com: 私信你了
2025-11-06 17:19