Как удалить прослушиватель событий в моем сервисе? - PullRequest
0 голосов
/ 10 октября 2018

Я новичок в angular и хочу знать, как удалить прослушиватель событий в моем сервисе, чтобы он прекратил получать какие-либо данные.В настоящее время я пытаюсь общаться, где страница 1 отправляет сообщение на страницу 2, используя широковещательный канал.Заранее спасибо.

export class Page2Component implements OnInit {
  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() {
    //I tried adding here but it does not remove
    this.broadCastService.channel.removeEventListener("message",this.ngOnDestroy)
    this.xx.unsubscribe();
    console.log("onDestroy");
    }

}
<div class="column-6">
	<h2>This is the PAGE 2</h2>
	<p>Message will be display here from first.html</p>

	Name: {{person?.name}}<br>
	Age: {{person?.age}}<br>
<button (click)="ngOnDestroy()">unsubcribe</button><button (click)="ngOnInit()">subcribe</button>
</div>

`

export class BroadcastService {
  
  public events: Observable<any>;
  private channel = new BroadcastChannel('test_channel');

  constructor() {
    this.events = new Observable ((observer) =>{
     this.channel.addEventListener ('message', (ev) =>{
       observer.next(ev.data);
     })
     this.channel.onmessageerror = ev => {
       observer.error(ev);
     }
    //I TRIED ADDING removeEventListener here but doesnt work
   });
  }
  public addPerson(person : any) {
    this.channel.postMessage(person); 
  }

  }
...