Отвечает ли канал asyn c от подписки на наблюдаемую, определенную в службе и указанную на переменную компонента? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть BehaviourSubject, определенный в службе, и я указываю на эту тему с помощью переменной, которую я определяю в другом компоненте, в представлении этого компонента я подписываюсь на эту тему, используя эту переменную, например:

service:

public exampleSubjebt$ = new BehaviorSubject<boolean>(true);

component.ts:

ngOninit() {
let someVariable = this.service.exampleSubject$;
}

представление компонента:

<app-something [options]="someVariable | async"></app-something>

Мой вопрос заключается в том, находится ли наблюдаемая в сервисе, а я вызвать его напрямую оттуда с помощью переменной, сделать так, чтобы канал asyn c не отписывался о уничтожении компонента?

Ответы [ 2 ]

3 голосов
/ 18 февраля 2020

Подписка находится в компоненте, а не в службе, поэтому канал asyn c будет правильно отписываться при уничтожении компонента.

0 голосов
/ 18 февраля 2020

Да, это отписаться. asyn c pipe - это директива angular, поэтому она имеет все жизненные циклы, которые имеет компонент. В реализации я обнаружил следующее:

class ObservableStrategy implements SubscriptionStrategy {
  createSubscription(async: Observable<any>, updateLatestValue: any): SubscriptionLike {
    return async.subscribe({next: updateLatestValue, error: (e: any) => { throw e; }});
  }

  dispose(subscription: SubscriptionLike): void { subscription.unsubscribe(); }

  onDestroy(subscription: SubscriptionLike): void { subscription.unsubscribe(); }
}

В ngOnDestroy они вызывают dispose

ngOnDestroy(): void {
  if (this._subscription) {
    this._dispose();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...