监控uni-app 返回并根据用户选择决定是否返回
问题
uni-app中提供了onBackPress方法监控页面返回,监控到返回时可进行一系列逻辑处理,此处贴主想的是监控到返回后使用uni.showModal,根据用户的选择是否确认返回上一级,代码如下
onBackPress(event) {
console.log("res")
uni.showModal({
title: '提示',
content: '是否退出uni-app?',
success: function (res) {
if (res.confirm) {
return false
} else if (res.cancel) {
return true
}
}
})
},
结果根本不会弹出弹窗,但是确实监控到了且打印了"res",似乎是因为uni.showModel是一个异步的方法,而官方也明确说了onBackPress不支持异步的方法,所以无法弹窗,也一直没找到别的解决办法,路过的大佬如果有解决的方法的话还望不吝赐教。
总之,最后想了一个邪门的方法,好吧,也是偶然发现有种情况这个弹窗其实是会弹出的,即onBackPress默认返回true,这样的话就有时间给showModal弹出来了,根据官方的资料如下,
返回有两种参数,一是backbutton即页面左上方的返回键,二是navigateBack即调用uni.navigateBack的方式。
解决方案如下,监控onBackPress如果是backbutton方式返回,则默认不让返回,待showModel弹出确认后,在确认处调用uni.navigateBack,onBackPress中如果是navigateBack的返回方式的话则允许返回。
代码如下
onBackPress(event) {
console.log("aaaa",event)
if(event.from == 'backbutton'){
uni.showModal({
title: '提示',
content: '是否退出uni-app?',
success: function (res) {
if (res.confirm) {
uni.navigateBack({
delta: 1
});
return false
} else if (res.cancel) {
console.log('用户点击取消')
}
}
})
return true
}else if(event.from == 'navigateBack'){
return false
}
},