当前位置: 首页 > news >正文

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

背景:

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

方案

1. 使用自定义返回事件

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

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

2. 使用onBackPress生命周期函数

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拦截器

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

结果:使用拦截器就可以将原生返回事件进行自定义修改,包括静止原生返回事件
ps: 仅仅在安卓app 中测试有效,其他的没有测试

http://www.lryc.cn/news/480597.html

相关文章:

  • appium启动 install driver安装驱动
  • 【机器学习】均方误差根(RMSE:Root Mean Squared Error)
  • [含文档+PPT+源码等]精品基于springboot实现的原生Andriod广告播放系统
  • 【机器学习】均方误差(MSE:Mean Squared Error)
  • 融合虚拟与现实,AR Engine为用户提供沉浸式交互体验
  • python | xmltodict,一个非常厉害的 关于XML数据 Python 库!
  • 教程:FFmpeg结合GPU实现720p至4K视频转换
  • MeterSphere接口自动化-ForEach循环
  • ssm074应急资源管理系统+jsp(论文+源码)_kaic
  • 怎么对 PDF 添加权限密码或者修改密码-免费软件分享
  • LVSM: A LARGE VIEW SYNTHESIS MODEL WITH MINIMAL 3D INDUCTIVE BIAS 论文解读
  • 7.《双指针篇》---⑦三数之和(中等偏难)
  • 鸿蒙ArkTS中的布局容器组件(Scroll、List、Tabs)
  • mybatis连接PGSQL中对于json和jsonb的处理
  • Redis 权限控制(ACL)|ACL 命令详解、ACL 持久化
  • 内网学习一:windows基础
  • 编译工具与文件学习(一)-YAML、repos、vcstoolcolcon
  • 使用 HuggingFace 提供的 Elasticsearch 托管交叉编码器进行重新排名
  • CKA认证 | Day1 k8s核心概念与集群搭建
  • [极客大挑战 2019]PHP 1
  • 【c++丨STL】vector模拟实现
  • SQLAlchemy 介绍与实践
  • docker进行SRS直播服务器搭建
  • windows server2019下载docker拉取redis等镜像并运行项目
  • 数据结构(8.7_2)——败者树
  • 设计模式-七个基本原则之一-里氏替换原则
  • k8s中基于overlay网络和underlay网络的网络插件分别有哪些
  • 一文详解java的数据类型
  • Flink API 的层次结构
  • lua入门教程:math