- 下载附件demo,点击 设置ID 创建几个embed组件
- 从第一个开始删除
- 发布:2026-03-08 12:11
- 更新:2026-03-13 15:28
- 阅读:270
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win11
HBuilderX类型: Alpha
HBuilderX版本号: 5.02
手机系统: HarmonyOS NEXT
手机系统版本号: HarmonyOS 6.0.0
手机厂商: 华为
手机机型: HUAWEI Mate60Pro
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
每个embed组件都会触发aboutToDisappear回调
每个embed组件都会触发aboutToDisappear回调
实际结果:
前几个不会触发aboutToDisappear,后几个会触发aboutToDisappear
前几个不会触发aboutToDisappear,后几个会触发aboutToDisappear
bug描述:
使用v-for渲染embed组件时,当删除掉某个渲染出来的embed组件时,原生组件的aboutToDisappear触发异常,比如for循环创建了六个embed,删除前三个完全不会触发aboutToDisappear,但是删除后三个就会触发自己的aboutToDisappear以及前面异常没触发的aboutToDisappear。
欢迎到专业群( uni-app鸿蒙化技术交流群 ) 咨询,群中有相关专业的管理员和群友。
作为 DCloud 官方人员,我对这条 bug 反馈进行如下评审:
一、反馈完整性评估
| 检查项 | 状态 | 说明 |
|---|---|---|
| BUG 标题 | ✅ | 简洁明了,指出“v-for + embed + aboutToDisappear 异常” |
| BUG 描述 | ✅ | 描述清楚,指出“删除前三个不触发,后三个触发并补触发前面的” |
| 代码示例 | ❌ | 未提供可直接运行的最小复现 demo,仅提示“下载附件 demo”,但附件未上传 |
| 复现步骤 | ⚠️ | 步骤简单,但依赖附件 demo,未提供最小可运行代码片段 |
| 预期结果 | ✅ | 合理:每个 embed 都应触发 aboutToDisappear |
| 实际结果 | ✅ | 明确:前几个不触发,后几个触发并补触发 |
| 分类信息 | ✅ | 提供了完整的环境信息(平台、系统、HX 版本、Vue 版本等) |
⚠️ 建议用户补充:请上传最小可运行 demo 或贴出关键代码(如
<embed>使用方式、v-for绑定逻辑、删除逻辑等),否则我们无法精确定位问题。
二、是否为已知问题或平台限制
根据知识库内容:
- ✅ embed 组件在鸿蒙平台使用原生组件渲染,其生命周期由原生层控制,确实存在生命周期触发时序不一致的风险。
- ✅ 鸿蒙平台原生组件生命周期触发机制与 Web 端不同,可能存在延迟或合并触发的行为。
- ⚠️ 知识库中未明确说明 aboutToDisappear 在 v-for 删除时一定触发,因此不能排除是平台行为或 bug。
? 结论:该问题可能为 bug,但需要进一步确认是否为平台行为或生命周期机制差异。
三、是否为基础概念误用
- ❌ 不是基础概念误用:用户正确使用
v-for渲染embed,并通过删除操作触发组件卸载。 - ❌ 不是平台不支持:鸿蒙平台明确支持
embed渲染原生组件,见 调用鸿蒙原生组件。
四、官方建议的下一步操作
-
请用户补充最小复现 demo(zip 或 GitHub 链接),包含:
v-for渲染<embed>的代码- 删除逻辑(如点击按钮删除某一项)
- 原生组件的
aboutToDisappear实现(如 ArkTS 侧代码)
-
建议用户尝试以下方式验证是否为平台行为:
- 使用
onBeforeUnmount/onUnmounted替代aboutToDisappear,看是否触发 - 使用
key绑定唯一值,避免 Vue 复用节点 - 使用
v-if替代v-for删除,看是否触发
- 使用
-
如确认为 bug,将提交至 HarmonyOS 适配团队处理,并建议用户临时使用
v-if控制组件卸载作为规避方案。
✅ 总结
| 项目 | 结论 |
|---|---|
| 是否为有效 bug | ✅ 是,需进一步确认 |
| 是否需补充信息 | ✅ 需补充 demo 和原生组件代码 |
| 是否可复现 | ⚠️ 无法确认,需用户补充 |
| 是否可临时规避 | ✅ 可尝试 v-if 替代 v-for 删除 |
如需继续跟进,请上传 demo 或贴出关键代码,我们将优先处理。
我测试了你提供的 demo,看起来功能是对的 ,你是发现 aboutToDisappear 事件不会实时触发,触发多次aboutToDisappear的数据也是正常的?
-
-
-
1***@qq.com (作者)
回复 [已删除]: 这只是一个简单的示例,我现在主要是需要使用for循环来配合embed通过原生控件渲染xCompoment来实现一个多人视频聊天功能,但当我使用v-if来销毁某个控件,或者在for循环里销毁某个控件,都会导致其他控件卡住,并且都是不会执行原生控件里的aboutToDisappear回调的,但是,如果我是从for循环渲染的控件组的最后一个开始删除,就会正常触发aboutToDisappear回调,并且其他控件也不会卡住.我有尝试过使用v-show来隐藏,不会出现卡住问题.所以我怀疑是组件没正确销毁导致的渲染问题.
2026-03-09 15:04