Skip to content

eventBus


  • eventBus:包含所有功能的事件总线对象
  • eventBus.on(eventName, listener):绑定事件监听
  • eventBus.emit(eventName, data):分发事件
  • eventBus.off(eventName):解绑指定事件名的事件监听,如果没有指定则解绑所有
javascript
const eventBus = {
  // 保存类型和回调容器
  callbacks: {
    // login: [fn1, fn2]
  }
}

eventBus.on = function (eventName, callback) {
  // 判断是否已有该类型事件
  if (this.callbacks[eventName]) {
    // 将cb推入
    this.callbacks[eventName].push(callback)
  } else {
    // 构造一个新的数组存储
    this.callbacks[eventName] = [callback]
  }
}

eventBus.emit = function (eventName, data) {
  // 如果该类型事件存在,将全部触发
  if (this.callbacks[eventName] && this.callbacks[eventName].length > 0) {
    this.callbacks[eventName].forEach(event => event(data))
  }
}

eventBus.off = function (eventName) {
  if (eventName) {
    delete this.callbacks[eventName]
  } else {
    this.callbacks = {}
  }
}