详细问题描述
很简单 我就想拦截当前页面返回事件 各种方式无效。onBackPress
页面生命周期 无法解析异步返回值问题。
实现方式
- onBackPress 只能返回同步的
false
或者true
。无法解析异步返回值的问题 ! 好歹你可以支持返回promise的情况吧。或者是再传入一个函数 让我们异步调用! ok?不行!
2.重写 backbutton
事件? 无效 没有提供 类似 getEventListeners
查询接口 或者是 removeAllEventListeners
类似的接口。就一个 removeEventListener
。我怎么知道你的已经绑定的函数名称 不行!
- 设置窗口
style
backButtonAutoControl:'none'
再设置titleNView:{'autoBackButton':false}
接着再模拟一个buttons
加onclick
来充当返回按钮。关键是 安卓的物理按键还是无法拦截啊 归根在 你们已经绑定了一个事件。还有两个生命周期要处理不行!
期望
能在返回页面之前做一些异步的操作并执行完成后再关闭页面 。最理想的就是 onBackPress 能支持 promise 返回值
心得
我写个插件容易么,期望官方能给出一个好的解决方法。插件地址uni-simple-router
IDE运行环境说明
HBuilderX 2.4.2.20191115
window 10 专业版
测试手机 :小米5x
3 个回复
1***@qq.com
另辟蹊径
uniapp的 onBackPress生命周期钩子,不支持async 所以不能写成async onBackPress(){}
因为 retuen true 就会禁用返回,所以先再data里定义一个offback 初始为true 也就是默认是禁用的
然后再onBackPress 函数中,调用要执行的逻辑,比如我的示例代码是弹窗 ,首先做个判断,如果当前返回是禁用状态,就弹窗。然后在逻辑中,当点击确认离开的时候,把offBack改为false再执行uni.navigateBack() ,手动执行onBackPress钩子 ,这时候onBackPress的return 就是false就可以返回了,当然,执行onBackPress()钩子还是会执行一次 methods里的back函数,不过我们有一个判断,只有offBack=true的时候才弹窗。完美解决
hhyang (作者) - 如有问题,请添加QQ1606726660 备注付费咨询
坐等你们回复我 然后继续加强app端
hhyang (作者) - 如有问题,请添加QQ1606726660 备注付费咨询
已解决
动态修改page对象的下 onBackPress 方法 实现 。源码请查阅 uni-simple-router 下的
beforeBackHooks
生命钩子