如何检查事件监听器是否被删除?



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

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

最新更新