uni-app 在uni.showModal的success回调中调用uni.navigateBack(), onBackPress会判断为from=backbutton而不是navigateBack

uni-app 在uni.showModal的success回调中调用uni.navigateBack(), onBackPress会判断为from=backbutton而不是navigateBack

开发环境 版本号 项目创建方式
Mac M1 HBuilderX

示例代码:

uni.showModal({  
    title: "确定放弃付款?",  
    content: "您的订单还未完成支付,请在订单取消前尽快完成支付。",  
    confirmColor: "#A81CA5",  
    cancelText: "继续支付",  
    confirmText: "确认离开",  
    success: (res) => {  
        console.log(res.confirm)  
        if (res.confirm) {  
            uni.navigateBack()  
        }  
    }  
})

操作步骤:

onBackPress(e) {  
    console.log(e)  
    if (e.from == 'backbutton') {  
        this.handleBackButton()  
        return true  
    }  
}

预期结果:

正确返回from=navigateBack

实际结果:

错误返回from=backbutton

bug描述:

在uni.showModal的success回调中调用uni.navigateBack(),onBackPress会判断为from=backbutton而不是from=navigateBack


更多关于uni-app 在uni.showModal的success回调中调用uni.navigateBack(), onBackPress会判断为from=backbutton而不是navigateBack的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 在uni.showModal的success回调中调用uni.navigateBack(), onBackPress会判断为from=backbutton而不是navigateBack的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 中,uni.navigateBack() 是一个用于返回上一个页面的 API。而 uni.showModalsuccess 回调中调用 uni.navigateBack() 时,onBackPress 生命周期函数会将返回的来源判断为 backbutton 而不是 navigateBack,这是因为 uni.navigateBack() 的触发方式与手动点击返回按钮的行为是类似的。

解决方案

如果你需要在 onBackPress 中区分返回的来源,可以通过自定义标记来实现。例如,你可以在调用 uni.navigateBack() 之前设置一个全局变量或状态,然后在 onBackPress 中根据这个变量或状态来判断返回的来源。

示例代码

// 在调用 uni.navigateBack() 之前设置一个标记
let isNavigateBack = false;

function showModalAndNavigateBack() {
  uni.showModal({
    title: '提示',
    content: '确定要返回吗?',
    success: function (res) {
      if (res.confirm) {
        isNavigateBack = true; // 设置标记
        uni.navigateBack();
      }
    }
  });
}

// 在页面的 onBackPress 生命周期函数中判断返回来源
export default {
  onBackPress(options) {
    if (isNavigateBack) {
      console.log('返回来源: navigateBack');
      isNavigateBack = false; // 重置标记
      // 处理 navigateBack 的逻辑
    } else {
      console.log('返回来源: backbutton');
      // 处理 backbutton 的逻辑
    }
  }
};
回到顶部