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次

Image 1

Image 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框架的事件处理产生冲突,导致弹出两次。

建议的解决方案:

  1. 添加防抖处理
let isShowing = false;
function showSheet() {
    if(isShowing) return;
    isShowing = true;
    
    uni.showActionSheet({
        itemList: ["内勤添加","外勤添加"],
        success: async res => {
            // 你的业务逻辑
        },
        complete: () => {
            isShowing = false;
        }
    });
}
  1. 检查事件绑定: 确保触发showActionSheet的点击事件没有重复绑定,特别是在自定义组件中要避免事件冒泡。

  2. 临时解决方案: 在鸿蒙平台上可以使用条件编译:

// #ifdef HARMONYOS
// 使用防抖版本
this.showSheetWithGuard();
// #endif
// #ifndef HARMONYOS
uni.showActionSheet({...});
// #endif
回到顶部