угловая отписка не работает без нгОнДестрой - PullRequest
0 голосов
/ 29 августа 2018

Невозможно отписаться от подписки, если используется публичный метод, а не ngOnDestroy.

Если есть наблюдаемый интервал rxjs, который используется для опроса API. Я подписываюсь на это наблюдаемое следующим образом:

Class .. {
   pollingSubscription: Subscription;

  ngOnInit() {
      startPolling();
  } 

  // when this gets triggered my polling subscription stops
  ngOnDestroy() {
      if (this.pollingSubscribe) {
          this.pollingSubscription.unsubscribe();
      }
  }

   startPolling() {
      const pollingInterval: Observable<any> = observable.interval(3000).startWith(0);
      this.pollingSubscription = pollingInterval.subscribe( _ => {
         this.store.dispatch(// trigger my Action);
      });
   }

   // when this gets triggered on a click event my polling subscription still keeps polling.
   stopPolling() {
       if ( // condition true) {
           // on this condition stop polling, FYI this line does get triggered,
           // but there is no effect, it still keeps subscribed.
           this.pollingSubscription.unsubscribe();
       }
   }
}

Что-то не так, что я делаю, в публичной функции stopPolling (). Как отменить подписку на условие, оставаясь активным для данного компонента.

Спасибо.

1 Ответ

0 голосов
/ 30 августа 2018

Ваш class использует implements OnInit, OnDestroy ?? может быть, если ваш класс не реализован с использованием OnDestroy, то ngOnDestroy() не будет выполнен. Это официальная ссылка для OnDestroy

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

@Component({selector: 'my-cmp', template: `...`})
class MyComponent implements OnDestroy {
    ngOnDestroy() {
       // ...
    }
}
...