首页 > 上网技巧 > 电脑小技巧 > 微信小程序中JS订阅者模式的使用

微信小程序中JS订阅者模式的使用

时间:2020-05-31 09:30 作者:QQ地带 我要评论

 
var listenerObj   //订阅者模式
function publicListener() {
  this.handlers = {}
}
publicListener.prototype = {
 
        on: function (eventType, handler) {
        var self = this;
        if (!(eventType in self.handlers)) {
          self.handlers[eventType] = [];
        }
        self.handlers[eventType].push(handler);
        return this;
      }, 
 
        // 触发事件(发布事件)
      emit: function (eventType) {
        var self = this;
        // 若没有注册该事件则抛出错误
        if (!(eventType in this.handlers)) {
          return new Error('无效事件')
        }
        var handlerArgs = Array.prototype.slice.call(arguments, 1);
        for (var i = 0; i < self.handlers[eventType].length; i++) {
          self.handlers[eventType][i].apply(self, handlerArgs);
        }
        return self;
      },
    
    // 删除订阅事件
      off: function (type, handler) {
        if (!(type in this.handlers)) {
          return new Error('无效事件')
        }
        if (!handler) {
          // 直接移除事件
          delete this.handlers[type]
        } else {
          const idx = this.handlers[type].findIndex(ele => ele === handler)
          // 抛出异常事件
          if (idx === undefined) {
            return new Error('无该绑定事件')
          }
          // 移除事件
          this.handlers[type].splice(idx, 1)
          if (this.handlers[type].length === 0) {
            delete this.handlers[type]
          }
        }
        return this;
      }
}
 
function listener() {
  if (listenerObj == undefined) {
    listenerObj = new publicListener()
  }
  return listenerObj
}
/**
 * 抛出的公有方法或者属性
 */
module.exports = {
  listener: listener,
}
 
使用
发布消息:
 
if (listenerObj != undefined) {
    listenerObj.emit('message', data)
 }
接收消息:
 
let listener = socketAdapter.listener()
var self = this;
listener.on('listChat', function(data) {
   self.ctx.update(0, data, () => {
 
   })
  self.setData({
    array: socketAdapter.listChatArray
 })
 socketAdapter.insertListChatArrayToStorage()
 })},
移除消息:
 
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function() {
    listener.off('listChat', null)
  },

标签: JS 微信小程序
顶一下
(0)
0%
踩一下
(0)
0%

Google提供的广告