event-bus.js 933 B

12345678910111213141516171819202122232425262728293031323334353637
  1. export const eventBus = {
  2. events: {},
  3. // 注册事件监听
  4. on(eventName, callback) {
  5. if (!this.events[eventName]) {
  6. this.events[eventName] = [];
  7. }
  8. this.events[eventName].push(callback);
  9. },
  10. // 触发事件
  11. emit(eventName, data) {
  12. const callbacks = this.events[eventName] || [];
  13. callbacks.forEach((callback) => {
  14. if (typeof callback === "function") {
  15. callback(data);
  16. }
  17. });
  18. },
  19. // 移除事件监听
  20. off(eventName, callback) {
  21. const callbacks = this.events[eventName];
  22. if (!callbacks) return;
  23. if (!callback) {
  24. delete this.events[eventName];
  25. return;
  26. }
  27. this.events[eventName] = callbacks.filter((item) => item !== callback);
  28. if (!this.events[eventName].length) {
  29. delete this.events[eventName];
  30. }
  31. }
  32. };