eventBus.js 863 B

12345678910111213141516171819202122232425262728293031323334353637
  1. // event-bus.js(改进版)
  2. const eventBus = {
  3. events: {},
  4. cachedEvents: {}, // 缓存已触发的事件
  5. // 监听事件(支持获取历史缓存事件)
  6. on(event, callback, getCached = true) {
  7. if (!this.events[event]) {
  8. this.events[event] = [];
  9. }
  10. this.events[event].push(callback);
  11. // 如果有缓存事件,立即执行回调
  12. if (getCached && this.cachedEvents[event]) {
  13. callback(this.cachedEvents[event]);
  14. }
  15. },
  16. // 触发事件(缓存最新数据)
  17. emit(event, data) {
  18. this.cachedEvents[event] = data;
  19. if (this.events[event]) {
  20. this.events[event].forEach(callback => callback(data));
  21. }
  22. },
  23. // 清除缓存事件
  24. clear(event) {
  25. if (event) {
  26. delete this.cachedEvents[event];
  27. } else {
  28. this.cachedEvents = {};
  29. }
  30. }
  31. };
  32. export default eventBus;