Отменяет ли метод ComponentRef.destroy () также подписчики событий компонентов? - PullRequest
0 голосов
/ 11 января 2019

Если у нас есть динамический (созданный динамически - не декларативно) экземпляр ComponentRef, и мы вызываем destroy() для экземпляра, будет ли это отменять подписку на все экземпляры EventEmitter, на которые подписаны.

Например, если мы output EventEmitter и мы подписываемся на него так:

this.componentRef.instance.output.subscribe(event => console.log(event));

И мы позвоним componentRef.destroy(), который позаботится о том, чтобы отписаться от подписки на output EventEmitter?

Сводная статья с ответами

https://medium.com/@ole.ersoy/subscribing-to-dynamic-component-eventemitters-4f931a5013e3

https://medium.com/@ole.ersoy/cleaning-up-subscriptions-to-dynamic-component-event-emitters-ad08c838c7a8

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Существует обратный вызов onDestroy от componentRef, который вы можете подключить для очистки подписок

  /**
   * A lifecycle hook that provides additional developer-defined cleanup
   * functionality for the component.
   * @param callback A handler function that cleans up developer-defined data
   * associated with this component. Called when the `destroy()` method is invoked.
   */
  abstract onDestroy(callback: Function): void;

Пример

const sub=this.componentRef.instance.output.subscribe(event => console.log(event));
this.componentRef.onDestroy(()=>{
    sub.unsubscribe()
})
0 голосов
/ 11 января 2019

Когда вызывается метод подписки, возвращается объект подписки. Если я буду следить за этим объектом. Вы должны вызывать отписку всякий раз, когда Angular уничтожает компонент.

E.x:

ngOnDestroy() {
   this.sub.unsubscribe();
}

Не отписаться от ngOnDestroy()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...