Подпишитесь на Observable и получайте События определенного типа - PullRequest
0 голосов
/ 16 мая 2019

У меня есть следующий угловой сервис:

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 ...

Это возможно? Как я могу это сделать?

1 Ответ

1 голос
/ 16 мая 2019

Прежде чем мы начнем, это:

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();
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...