微信小程序

微信小程序的动态网络监听-错误示范的思索

2019-03-01  本文已影响6人  AKyS佐毅

在微信小程序的实际开发中,根据网络状态动态展示不同界面。一般都是调用wx.onNetworkStatusChange方法。

wx.onNetworkStatusChange(function(res) {
}

那么如果有超过一半的界面都需要动态网络监听,那么就会写一堆这样的网络监听。初衷是一处编写,其他任何地方都能使用。那么就需要对现有的监听进行封装。

设计的原则就是当页面加载的时候进行注册网络状态监听,如果存在了就不注册了。当界面卸载的时候移除监听即可。但是目前小程序无法继承的原因,还是需要在很多界面写注册和移除。反倒不如直接使用系统的API了。

哈哈,有点为了设计而设计了。最终回退了代码。。。。。。不过其他的监听倒是可以遵循这个原则来。


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

    thisPage = this;
    var pages = getCurrentPages() //获取加载的页面
    var currentPage = pages[pages.length - 1] //获取当前页面的对象
    var url = currentPage.route //当前页面url
    thisPage.setData({
      url:url
    })

    app.registerNetworkNotify(function (res) {
       thisPage.setData({
        networkStatus: res
      })
    }, thisPage.data.url);
  },
 /**
  * 生命周期函数--监听页面卸载
  */
  onUnload: function () {
    app.deallocNetworkNotify(this.data.url);
  },

  registerNetworkNotify: function(action, url) {
    const that = this;
    var  tempArray = that.data.networkArray;
    var hasExs = false;
    for (var i = 0; i < tempArray.length; i++) {
      var item = tempArray[I];
      if (item.url == url) {
        hasExs = true;
        break;
      }
    }
    if (!hasExs) {
      this.data.networkArray.push({
        action: action,
        url: url
      });
    }

    console.log(this.data.networkArray);
    console.log("newworkStatusRegister");
  }
  deallocNetworkNotify: function(url) {
    const that = this;
    let tempArray = that.data.networkArray;
    let copyArray = JSON.parse(JSON.stringify(tempArray));

    for (var i = 0; i < tempArray.length; i++) {
      var item = tempArray[I];
      if (item.url == url) {
          copyArray.splice(i, 1);
      }
    }

    that.data.networkArray = copyArray;
    console.log(this.data.networkArray);
    console.log("newworkStatusDealloc");
  }
上一篇 下一篇

猜你喜欢

热点阅读