Angular 如何检查eventListener是否已删除?

Angular 如何检查eventListener是否已删除?,angular,events,addeventlistener,Angular,Events,Addeventlistener,我想在取消订阅observable时删除事件侦听器。我的问题是如何检查事件侦听器是否已删除。有没有办法检查事件侦听器是否已删除 export class BroadcastService { public events: Observable < any > ; public channel = new BroadcastChannel('test_channel'); constructor() { this.events = Observable.crea

我想在取消订阅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);
  }

}
导出类广播服务{
公共事件:可观察的;
公共频道=新广播频道(“测试频道”);
构造函数(){
this.events=Observable.create((observator)=>{
常量侦听器=(ev)=>{
下一个观察者(ev.数据),
console.log(“登录”)
};
this.channel.addEventListener('message',listener);
return()=>{
this.channel.removeEventListener('message',listener);
};
});
}
公共地址人(人:任何){
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");
  }
导出类Page2Component实现OnInit{
私有组件已销毁:Subject=新Subject();
私人xx:任何;
公众人士={}
作为人;
构造器(公共广播服务:广播服务){
}
恩戈尼尼特(){
this.xx=this.broadCastService.events.subscribe((e)=>{
this.person.age=e.age;
this.person.name=e.name;
});
console.log(“onInit”);
}
恩贡德斯特罗(){
此.xx.取消订阅();
控制台日志(“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);
  }

}
从'rxjs'导入{Observable};
导出类广播服务{
公共事件:可见;
公共频道=新广播频道(“测试频道”);
构造函数(){
this.events=Observable.create((observator)=>{
this.channel.addEventListener('消息',(ev)=>{
下一个观察者(电动汽车数据)
});
return()=>{
this.channel.removeEventListener('message',(ev)=>{
下一个({
…电动汽车数据,
删除:true
})
});
};
});
}
公共地址人(人:任何){
this.channel.postMessage(person);
}
}

一旦你订阅了它,你可以检查数据是否删除了它的属性。

你能给我一个例子吗,对不起,我是Angular的新手。根据我的理解,这表明观察对象是否已经被取消订阅。但是我如何检查removeEventListener是否被执行?更新了答案。请检查。