发布订阅模式 仿写Vue事件监听手写js实现

「爱情、让人受尽委屈。」 2022-11-18 15:50 174阅读 0赞

Vue组件中,可以使用 $emit$on$off 分别来分发、监听、取消监听事件实现组件通信,比较方便;

最近空闲时间手撸代码实现了发布订阅模式,可以进行组件通信。

话不多说,直接上代码

  1. /**
  2. * Created by laichengliang on 2021/04/13.
  3. */
  4. const center = {}
  5. // 事件监听
  6. center.on = (eventName, callback) => {
  7. if (!center[eventName]) center[eventName] = []
  8. // 保存回调函数
  9. center[eventName].push(callback)
  10. }
  11. // 事件触发
  12. center.emit = (eventName, params) => {
  13. // 取出对应事件的回调函数
  14. const callbackArr = center[eventName]
  15. // 一一调用每一个回调事件
  16. callbackArr.map(callback => callback(params))
  17. }
  18. // 事件移除
  19. center.off = (eventName, callback) => {
  20. // 情况1:只传eventName,移除所有事件
  21. // 情况2:传eventName和callback
  22. if (!callback) {
  23. center[eventName] = null
  24. } else {
  25. const callbackArr = center[eventName]
  26. // 删除指定的callback回调
  27. const result = callbackArr.filter(callbackItem => callback !== callbackItem)
  28. // 重新赋值
  29. center[eventName] = result
  30. }
  31. }
  32. export default center

发表评论

表情:
评论列表 (有 0 条评论,174人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js仿日历

    项目需求,页面展示当前月的日历,每天的框里面放上用电量,可以按月查询,日历展示如下: ![在这里插入图片描述][20200514171354586.png] ![在这里插

    相关 JS实现Promise

    Promise是一个管理异步编程的方案,它是一个构造函数,每次使用可用new创建实例;它有三种状态:pending、fulfilled和rejected,这三种状态不会受...

    相关 JS实现Promise

    Promise是一个管理异步编程的方案,它是一个构造函数,每次使用可用new创建实例;它有三种状态:pending、fulfilled和rejected,这三种状态不会受...