如何检查 eventListener 是否被删除?

塔奇夫·尤索夫

我想在取消订阅 observable 时删除事件侦听器。我的问题是如何检查是否删除了事件侦听器。有没有办法检查事件侦听器是否被删除?

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");
  }
阿杰梅拉

您可以在服务中手动执行此操作:

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属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章