监控uni-app 返回并根据用户选择决定是否返回

监控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
}
	},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值