emitter.ts 961 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import {Subject} from 'vendor/npm/rxjs/Subject';
  2. var hasOwnProp = {}.hasOwnProperty;
  3. function createName(name) {
  4. return '$' + name;
  5. }
  6. export class Emitter {
  7. subjects: any;
  8. constructor() {
  9. this.subjects = {};
  10. }
  11. emit(name, data?) {
  12. var fnName = createName(name);
  13. this.subjects[fnName] || (this.subjects[fnName] = new Subject());
  14. this.subjects[fnName].next(data);
  15. }
  16. on(name, handler) {
  17. var fnName = createName(name);
  18. this.subjects[fnName] || (this.subjects[fnName] = new Subject());
  19. this.subjects[fnName].subscribe(handler);
  20. };
  21. off(name, handler) {
  22. var fnName = createName(name);
  23. if (this.subjects[fnName]) {
  24. this.subjects[fnName].dispose();
  25. delete this.subjects[fnName];
  26. }
  27. }
  28. dispose() {
  29. var subjects = this.subjects;
  30. for (var prop in subjects) {
  31. if (hasOwnProp.call(subjects, prop)) {
  32. subjects[prop].dispose();
  33. }
  34. }
  35. this.subjects = {};
  36. }
  37. }