uni-app方法showActionSheet在鸿蒙中会弹出2次
uni-app方法showActionSheet在鸿蒙中会弹出2次
示例代码:
uni.showActionSheet({
itemList: ["内勤添加","外勤添加"],
success: async res => {
if(res.tapIndex == 0){ //内勤只能添加一次
let index = this.explainList.findIndex(item=>item.name == '内勤');
if(index != -1) {
uni.showModal({
title:"警告!",
showCancel:false,
content:"内勤一天只能有一次打卡补签"
})
return
}
this.explainList.push(
{
name:"内勤",
id:ESUtils.fn.newGuid(),
addr:"",
start:"09:00",
over:"18:00",
state:"未打卡",
sign:0,
delete:true
}
)
}else if(res.tapIndex == 1){
this.explainList.push(
{
name:"外勤",
id:ESUtils.fn.newGuid(),
addr:"未知地址,补卡外勤",
start:"09:00",
over:"18:00",
state:"外勤未签到",
sign:0,
delete:true
}
);
}
}
});
操作步骤:
- 点击按钮出现
预期结果:
- 正常弹出
实际结果:
- 弹出2次
bug描述:
- 使用uni.showActionSheet() API 在鸿蒙中会弹出2次


更多关于uni-app方法showActionSheet在鸿蒙中会弹出2次的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
新建一个空白项目看看是否能复现
更多关于uni-app方法showActionSheet在鸿蒙中会弹出2次的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这是鸿蒙系统上uni-app的一个已知兼容性问题。在鸿蒙系统中,showActionSheet方法有时会因为系统事件冒泡机制与uni-app框架的事件处理产生冲突,导致弹出两次。
建议的解决方案:
- 添加防抖处理:
let isShowing = false;
function showSheet() {
if(isShowing) return;
isShowing = true;
uni.showActionSheet({
itemList: ["内勤添加","外勤添加"],
success: async res => {
// 你的业务逻辑
},
complete: () => {
isShowing = false;
}
});
}
-
检查事件绑定: 确保触发
showActionSheet的点击事件没有重复绑定,特别是在自定义组件中要避免事件冒泡。 -
临时解决方案: 在鸿蒙平台上可以使用条件编译:
// #ifdef HARMONYOS
// 使用防抖版本
this.showSheetWithGuard();
// #endif
// #ifndef HARMONYOS
uni.showActionSheet({...});
// #endif

