Использование асинхронного канала значительно упрощает обработку подписок.Он автоматически обрабатывает отмену подписки в отличие от подписки в компоненте.
Тем не менее, шаблон лучше, чем в примере.Вместо нескольких асинхронных вызовов компонентов вы можете написать это двумя различными способами.Я предполагаю, что эти компоненты находятся в одном файле шаблона:
<div *ngIf="(myObservable$ | async) as myObservable">
<my-random-component [id]="myObservable.id">
<my-random-component2 [name]="myObservable.name">
</div>
Упаковка кода в ngIf
делает 2 вещи:
- Сокращает дублирующийся код
- Компоненты не существуют, пока
myObservable$
не будет готов
Есть также еще одна идея, если вы хотите придерживаться вызова асинхронно каждый раз:
// COMPONENT
name$: Observable<string>;
id$: Observable<string>;
ngOnInit() {
// Return the exact value you want rather than the full object
this.name$ = OBSERVABLE_SOURCE
.pipe(
map(res => res.name)
);
this.id$ = OBSERVABLE_SOURCE
.pipe(
map(res => res.id)
);
}
// TEMPLATE
<my-random-component [id]="(id$ | async)">
<my-random-component2 [name]="(name$ | async)">
Трубы не запускаются автоматически без подписки.Вы можете сопоставить, коснуться или сделать что-либо еще с ним, и он не будет работать, пока вы не добавите async/.subscribe()
.