Comments 8
Async pipe - отличная вещь, но только в простых компонентах (с простым шаблоном и без бизнес-логики).
Когда появляется много структурных детектив - использовать пайп становится весьма затруднительно. Особенно учитывая то, что забаиндить значение стрима в шаблонную переменную возможно только через использование структурной детективы ngIf или ngFor.
А в статье не рассмотрен гораздо более правильный способ отписки внутри компонента, по сравнению с переменными для подписок.
А именно заведение одной переменной типа Subject и использование возможностей RxJS - takeUntil.
private unsubscrib$e: Subject<void> = new Subject<void>();
ngOnDedtroy() { this.unsubscribe$.next(); this.unsubscribe.complete();}
sub.pipe(takeUntil(this.unsubscribe$)).subscribe()!
Вот, собственно и все. Остаётся только добавить takeUntil на все подписки.
Вы правы насчет ngIf и ngFor. У нас используется tuiLet, когда в этих структурных директивах нет необходимости.
Идея статьи была в том, что бы рассказать про AsyncPipe и как он работает изнутри, потому что в начале моего пути это казалось какой-то магией.
А так, когда нет возможности использовать AsyncPipe, мы подписываемся и отписываемся внутри, как вы и сказали. Еще у нас есть TuiDestroyService, что позволяет не создавать сабжект каждый раз руками.
Но в большинстве случаев у нас используется AsyncPipe и проблем не наблюдаем.
По мне так наоборот, лишняя сущность, лишний оператор, применение его не по назначению.
Загадка трубы, или AsyncPipe в Angular