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
更多关于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.showModal
的 success
回调中调用 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 的逻辑
}
}
};