Как проверить, удален ли eventListener? - PullRequest
0 голосов
/ 11 октября 2018

Я хочу удалить прослушиватель событий после отказа от подписки на наблюдаемое.У меня вопрос, как я могу проверить, удален ли слушатель события или нет.Есть ли способ проверить, удаляется ли прослушиватель событий?

export class BroadcastService {

  public events: Observable < any > ;
  public channel = new BroadcastChannel('test_channel');

  constructor() {
    this.events = Observable.create((observer) => {

      const listener = (ev) => {
        observer.next(ev.data),
          console.log("on")
      };
      this.channel.addEventListener('message', listener);

      return () => {
        this.channel.removeEventListener('message', listener);
      };
    });
  }

  public addPerson(person: any) {
    this.channel.postMessage(person);
  }

}

И мой компонент:

export class Page2Component implements OnInit {
  private componetDestroyed: Subject < any > = new Subject();
  private xx: any;

  public person = {}
  as Person;

  constructor(public broadCastService: BroadcastService) {

  }

  ngOnInit() {
    this.xx = this.broadCastService.events.subscribe((e) => {
      this.person.age = e.age;
      this.person.name = e.name;
    });
    console.log("onInit");
  }

  ngOnDestroy() {
    this.xx.unsubscribe();
    console.log("onDestroy");
  }

1 Ответ

0 голосов
/ 11 октября 2018

Вы можете сделать это вручную там, в своем сервисе:

import { Observable } from 'rxjs';

export class BroadcastService {

  public events: Observable<any>;
  public channel = new BroadcastChannel('test_channel');

  constructor() {
    this.events = Observable.create((observer) => {

      this.channel.addEventListener('message', (ev) => {
        observer.next(ev.data)
      });

      return () => {
        this.channel.removeEventListener('message', (ev) => {
          observer.next({
            ...ev.data,
            removed: true
          })
        });
      };
    });
  }

  public addPerson(person: any) {
    this.channel.postMessage(person);
  }

}

После того, как вы подпишетесь на него, вы можете проверить, есть ли у данных свойство removed.

...