订阅 Observable 并获取特定类型的事件

Subscribe Observable and get Events of specific type

我有以下 Angular 服务:

export class EventService {

  private subject = new Subject<Event>();

  send(code: EventCode, data?: any) {
    this.subject.next(event);
  }

  clear() {
    this.subject.next();
  }

  get(): Observable<Event> {
    return this.subject.asObservable();
  }

}

其中 Event 和 EventCode 是:

export class Event {
  code: EventCode;
  data: any;
  constructor(code: EventCode, data?: any) {
    this.code = code;
    this.data = data;
  } 
} 

export enum EventCode {
  Created,
  Deleted,
  Updated
}

那我使用如下:

this.eventService.get().subscribe((event: Event) => { 
  // Do something 
});

我希望只能订阅具有特定 EventCode 的事件。

或者可能只对具有特定 EventCode 的事件做出反应 ...

这可能吗?我该怎么做?

在我们开始之前,这个:

this.eventService.get().subscribe((event: Event) => { 
  // Do something 
});

当组件销毁时会泄漏内存,因为您没有退订。改为这样做。

export class MyComponent implements OnInit, OnDestroy {
  // store subscrition
  private eventServiceSubscription: Subscription;

  ngOnInit() {
        this.eventServiceSubscription = this.eventService.get().subscribe((event: Event) => {
          // check event code
          if(event.code === 'someEventCode') {
            // process event
           }
         });
   }

   ngOnDestroy() {
     this.eventServiceSubscription.unsubscribe();
   }
}