Angular: безопасно ли использование вложенных асин c труб? - PullRequest
0 голосов
/ 29 апреля 2020

Я не смог найти никакой документации, связанной с этим, так что вот она. У меня есть это использование asyn c pipe в шаблоне:

<component [aliases]="(users$ | async).profile.aliases$ | async"/>

Правильно ли отписана подписка aliases$ при выдаче users$? А что если на элементе обертки есть *ngIf?

1 Ответ

2 голосов
/ 29 апреля 2020

Чтобы избежать использования нескольких async труб, попробуйте это в классе

aliases$ = this.users$.pipe(
  switchMap(users => users.profile.aliases$),
)

<component [aliases]="aliases$ | async"/>

И относительно вашего вопроса о безопасности. Подписка на внутреннюю заметку будет жива. Проверьте этот стек https://stackblitz.com/edit/angular-f88kfn.

Если мы погрузимся в источники AsyncPipe, мы обнаружим, что канал отписывается в ngOnDestroy ловушке. Но это не вызывается, если «внешняя» наблюдаемая просто имеет новое значение в «потоке». Так что просто используйте switchMap и одну async трубу.

Надеюсь, это поможет.

...