uniapp 如何修改 返回按钮(左上角+物理按钮+侧滑)触发的返回事件

背景:

使用uniapp 开发安卓app,在用户编辑后直接返回时,使用弹窗提醒用户:还没有保存,是否保存?

方案

1. 使用自定义返回事件

ts 复制代码
//返回
back() {
// 业务逻辑,弹窗提醒
uni.showModal({
	title: '内容尚未保存,是否保存?',
	success: function (res) {
		if (res.confirm) {
			saveFun()
		} else if (res.cancel) {
			console.log('用户点击取消');
			// 然后返回
			uni.navigateBack()
		}
	}
})

},

结果:点击自定义的按钮没有问题,但是使用原生按钮返回或者是侧滑返回依旧不执行自定义逻辑

2. 使用onBackPress生命周期函数

ts 复制代码
onBackPress((option) =>{
	if(option.from === 'backbutton'){
		uni.showModal({
			title: '内容尚未保存,是否保存?',
			success: function (res) {
				if (res.confirm) {
					saveFun()
				} else if (res.cancel) {
					console.log('用户点击取消');
					// 然后返回
					uni.navigateBack()
				}
			}
		})
	
	}
	return true;
})

结果:虽然会提醒,但是无法阻止返回事件,在用户还没有点击保存的时候,它就已经返回到上一个页面了,这个也不行

3. 我测试成功的方案:使用uni拦截器

  • 添加拦截器
ts 复制代码
onShow(() =>{
	const {diaryContext,setDiaryContext} = useEditStore();
	setDiaryContext(diaryRef.value)
	uni.addInterceptor('navigateBack', {
	invoke(args) {
			// 判断是不是返回按钮触发的返回事件
		  if(args?.from === 'backbutton'){
		  		// 必须使用状态管理获取组件实例,拦截器中不能直接拿到组件的实例
			  backFun(diaryContext);
			  return false; // 阻止返回
		  }else{
			  return true; // 允许返回
		  }
	}
	})
})
  • 卸载拦截器,拦截器需要记得卸载
ts 复制代码
onHide(() =>{
	uni.removeInterceptor('navigateBack')
})

结果:使用拦截器就可以将原生返回事件进行自定义修改,包括静止原生返回事件

ps: 仅仅在安卓app 中测试有效,其他的没有测试

相关推荐
码兄科技3 天前
24小时自助健身房系统软件开发实战指南:功能设计与部署方案
java·spring boot·uni-app
2501_916007473 天前
苹果商店iOS应用上架费用全面解析:开发者计划与审核费用计算
android·ios·小程序·https·uni-app·iphone·webview
2501_916008893 天前
如何实现iOS App代码混淆:SwiftShield使用指南
android·ios·小程序·https·uni-app·iphone·webview
2501_916008893 天前
怎么用 Godot 导出 iOS 应用并上架 App Store?签名字段该填什么?
android·ios·小程序·https·uni-app·iphone·webview
郑州光合科技余经理4 天前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
白远山4 天前
城市电竞陪玩调度系统实战:从派单算法到多端协同的架构拆解
java·架构·uni-app·需求分析
白远山5 天前
上海24小时自助健身房系统软件开发实战指南
java·架构·uni-app·需求分析
白远山6 天前
上海24小时自助健身房系统软件开发实战指南:从需求到部署
java·架构·uni-app·需求分析
海鸥两三6 天前
小程序文档预览 · 进阶面试题
小程序·uni-app·uniapp
海鸥两三6 天前
微信小程序 PDF 预览实践(uni.downloadFile → uni.openDocument)
小程序·uni-app