无法顺利使用wx.offThemeChange;如何使用该函数?
发布于 5 年前 作者 yangfeng 10238 次浏览 来自 问答

【使用的是最新版的小程序基础库。事实上该问题与基础库版本无关】

我想实现一个简单的功能:在页面载入后监听黑夜主题变化,并且页面销毁时取消监听。然而目前的小程序引擎设计似乎无法实现该功能,尤其是“页面销毁时取消监听”。实例代码如下。

如果页面Unload时会自动wx.offThemeChange,请告知、并在小程序文档中也注明;如果必须通过污染全局来绕过该问题,那么请小程序团队修复该设计缺陷;如果有正常的解决方法,请麻烦附上代码范例片段。

Page({
  someOnThemeChangeHandler(result) {
    // 为了在事件handler中能使用this,必须把handler写作Page的一个属性
    this.setData({/* 处理themeChange事件 */});
  },

  onLoad() {
    // 保存this上下文
    const handler = this.someOnThemeChangeHandler.bind(this);
    // 在页面载入后开始监听
    wx.onThemeChange(handler)
    // 注:直接写wx.onThemeChange(this.someOnThemeChangeHandler)显而易见是不行的
  },

  onUnload() {
    // 我想在这里取消监听,但是显然无法做到
    // wx.offThemeChange(this.someOnThemeChangeHandler)显而易见是不行的

    // wx.offThemeChange(this.someOnThemeChangeHandler.bind(this))也是不行的
    // 因为const a = someFunction.bind(someContext); const b = someFunction.bind(someContext);有a不等于b
    // 我必须传入onLoad scope中的handler变量才可以
  },
})
回到顶部