侧边栏壁纸
  • 累计撰写 5 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
js

微信小程序Event.js使用方法

一米八的小胖子
2022-08-14 / 0 评论 / 0 点赞 / 2,749 阅读 / 365 字 / 正在检测是否收录...

微信小程序Event.js使用方法

Event.js

//Event.js
class Event {
  /**
   * on 方法把订阅者所想要订阅的事件及相应的回调函数记录在 Event 对象的 _cbs 属性中
   */
  on(event, fn) {
    if (typeof fn != 'function') {
      console.error('fn must be a function');
      return;
    }
    this._cbs = this._cbs || {};
    (this._cbs[event] = this._cbs[event] || []).push(fn);
  }
  /**
   * emit 方法接受一个事件名称参数,在 Event 对象的 _cbs 属性中取出对应的数组,并逐个执行里面的回调函数
   */
  emit(event) {
    this._cbs = this._cbs || {};
    var callbacks = this._cbs[event],
      args;
    if (callbacks) {
      callbacks = callbacks.slice(0);
      args = [].slice.call(arguments, 1);
      for (var i = 0, len = callbacks.length; i < len; i++) {
        callbacks[i].apply(null, args);
      }
    }
  }
  /**
   * off 方法接受事件名称和当初注册的回调函数作参数,在 Event 对象的 _cbs 属性中删除对应的回调函数。
   */
  off(event, fn) {
    this._cbs = this._cbs || {};
    // all
    if (!arguments.length) {
      this._cbs = {};
      return;
    }
    var callbacks = this._cbs[event];
    if (!callbacks) return;
    // remove all handlers
    if (arguments.length === 1) {
      delete this._cbs[event];
      return;
    }
    // remove specific handler
    var cb;
    for (var i = 0, len = callbacks.length; i < len; i++) {
      cb = callbacks[i];
      if (cb === fn || cb.fn === fn) {
        callbacks.splice(i, 1);
        break;
      }
    }
    return;
  }
}
export default Event;

微信小程序全局引入

// 在app.js引入
import Event from './utils/event'
wx.event = new Event()

微信小程序使用

// 发射消息
wx.event.emit('v4_autologin', '重新请求接口')
//订阅收到消息
wx.event.on('v4_autologin', e => {
  console.log(e, '重新请求接口')
  this.onShow()
})
onHide() {
  // 结束监听
  wx.event.$off('v4_autologin')
},
0

评论区