自定义全局event bus

1.publishBus.js

let callbackMap = {}

export default {
  $on: function (eventName, callback) {
    // 根据事件名字获得了回调
    // 保存所有的回调函数
    if (!callbackMap[eventName]) {
      callbackMap[eventName] = []
    }
    callbackMap[eventName].push(callback)
  },

  $emit: function (eventName, ...rest) {
    // 根据事件名字,调用对应的回调函数
    // 调出来之前保存的相同事件名字的回调函数,一个一个执行。
    let callbackArr = callbackMap[eventName]
    if (!callbackArr) {
      return //如果没有回调
    }
    callbackArr.map(callbackItem => {
      callbackItem(...rest)
    })
  },

  $off: function (eventName,callback) {
    if (!eventName) {
      //移除所有监听
      callbackMap = {}
      return
    }
    if (eventName && (!callback)) {
      //移除指定事件的所有监听
      callbackMap[eventName] = []
    }
    if (eventName && callback) {
      //移除指定事件的指定监听
      //获得所有回调
      let callbackArr = callbackMap[eventName]
      callbackMap[eventName] = callbackArr.filter(call => {
        call == callback
      })
    }
  }
}

2.main.js

Vue.prototype.publishBus = publishBus

3.使用

this.publishBus.$emit('事件名','传参')
this.publishBus.$on('事件名','参数')
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容