收藏
回答

wx.offAppHide无法取消监听事件

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug offAppHide 工具 1.02.1904090 2.6.1

在App.js的onLaunch方法中写了两个方法,一个wx.onAppShow,一个wx.onAppHide,在wx.onAppShow的监听方法中执行了wx.offAppHide方法


按照预想,进行前后台切换,会先触发一次小程序切后台事件,然后再触发小程序切前台事件,这个时候会触发wx.offAppHide方法取消掉对切后台事件的监听,所以后面切后台并不会进行触发回调事件


//app.js

App({

onLaunch: function() {

    wx.onAppShow(function(e){

        if (e.scene==1001){

            wx.offAppHide(function(){

            

            })

        }

    })

    wx.onAppHide(function(){

        console.log('111');

    })

   }

})


回答关注问题邀请回答
收藏

2 个回答

  • 社区技术运营专员-娇华
    社区技术运营专员-娇华
    2019-05-06

    你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)

    2019-05-06
    有用
    回复 5
  • DWL
    DWL
    2019-05-07

    我这里测试没问题。

    首先,你的代码有 bug,在你首次打开的时候,wx.onAppShow 的回调函数会晚于 wx.onAppHide,所以你的 wx.onAppHide 压根是没用的。

    其次,你要注意 e.scene 是否真的是 1001。

    2019-05-07
    有用
    回复 6
    • 慢悠悠先生
      慢悠悠先生
      2019-05-08

      你好,能否给段你测试用的代码片段给我看看

      2019-05-08
      回复
    • DWL
      DWL
      2019-05-08回复慢悠悠先生

      就是你的这个代码片段,正确从1001场景进入的话,按照你的代码逻辑,onAppHide 挂上后会立即被 offAppHide,你可以试试

      2019-05-08
      回复
    • 慢悠悠先生
      慢悠悠先生
      2019-05-08回复DWL

      我后面已经去掉了这个判断了,改为直接去执行offAppHide,这样意味着onAppHide便不会被执行,但是在开发工具上,多次点击切后台和切前台,onAppHide依旧多次被触发

      2019-05-08
      回复
    • 慢悠悠先生
      慢悠悠先生
      2019-05-08回复DWL

      可以了,为啥去掉回调函数就行了呢?

      2019-05-08
      回复
    • DWL
      DWL
      2019-05-08回复慢悠悠先生

      是这样的,这个的设计跟 addEventListener/removeEventListener 是类似的,你用这种方式写:

      const func = () => {}
      wx.onAppHide(func)
      wx.offAppHide(func)


      2019-05-08
      回复
    查看更多(1)
登录 后发表内容