hhyang
hhyang
  • 发布:2019-12-15 16:21
  • 更新:2022-10-15 16:30
  • 阅读:1596

【报Bug】app端拦截返回问题  【已解决】

分类:uni-app

详细问题描述

很简单 我就想拦截当前页面返回事件 各种方式无效。onBackPress 页面生命周期 无法解析异步返回值问题。

实现方式

  1. onBackPress 只能返回同步的 false 或者 true。无法解析异步返回值的问题 ! 好歹你可以支持返回promise的情况吧。或者是再传入一个函数 让我们异步调用! ok? 不行!

2.重写 backbutton 事件? 无效 没有提供 类似 getEventListeners 查询接口 或者是 removeAllEventListeners 类似的接口。就一个 removeEventListener 。我怎么知道你的已经绑定的函数名称 不行!

  1. 设置窗口 style backButtonAutoControl:'none' 再设置 titleNView:{'autoBackButton':false} 接着再模拟一个 buttonsonclick 来充当返回按钮。关键是 安卓的物理按键还是无法拦截啊 归根在 你们已经绑定了一个事件。还有两个生命周期要处理 不行!

期望

能在返回页面之前做一些异步的操作并执行完成后再关闭页面 。最理想的就是 onBackPress 能支持 promise 返回值

心得

我写个插件容易么,期望官方能给出一个好的解决方法。插件地址uni-simple-router

IDE运行环境说明

HBuilderX 2.4.2.20191115

window 10 专业版

测试手机 :小米5x

2019-12-15 16:21 负责人:无 分享
已邀请:
1***@qq.com

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的时候才弹窗。完美解决

export default {  

        data() {  
            return {  

                offBack: true,  
            }  
        },  

        onBackPress() {  

            this.back()  

            return this.offBack  

        },  

        methods: {  
            async back() {  
                if(this.offBack){  
                    let resd = await this.$showModal({  
                        content: '现在离开后,会话就会永远消失',  
                        title: '确定离开么?',  
                        cancelText: '离开',  
                        confirmText: '回复'  
                    }).then(res => {  
                        // 点击确认的操作  
                        console.log(res);  
                    }).catch(err => {  
                        this.offBack = false  
                        uni.navigateBack()  
                    })  
                }  

            }  
        }  
    }
hhyang

hhyang (作者) - 如有问题,请添加QQ1606726660 备注付费咨询

坐等你们回复我 然后继续加强app端

hhyang

hhyang (作者) - 如有问题,请添加QQ1606726660 备注付费咨询

已解决

动态修改page对象的下 onBackPress 方法 实现 。源码请查阅 uni-simple-router 下的  beforeBackHooks 生命钩子

要回复问题请先登录注册