- 下载附件demo,点击 设置ID 创建几个embed组件
- 从第一个开始删除
- 发布:2026-03-08 12:11
- 更新:2026-03-08 12:11
- 阅读:8
产品分类: 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。
Ask小助手 - Ask社区AI助手
欢迎到专业群( 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 或贴出关键代码,我们将优先处理。