Вы можете взглянуть на комбинационный оператор Rxjs zip
, который может вам помочь.
https://www.learnrxjs.io/operators/combination/zip.html
https://rxmarbles.com/#zip
В вашем контроллере выможно создать новую наблюдаемую форму, например:
combined$: Observable<{ categories: Array<Category>, qualifications: Array<Qualification>}> = zip(
this.categories$,
this.qualifications$,
(categories: Array<Category>, qualifications:Array<Qualification>) => {
return { categories, qualifications };
}
);
, которая будет объединять излучаемые значения, затем вы можете использовать ее для получения комбинированных значений:
<ng-container *ngIf="!(categoriesLoading$ | async); else loading">
<mat-vertical-stepper *ngIf="combined$ | async as combined">
<mat-step>
<categories-form [categories]="combined.categories"></categories-form>
</mat-step>
<mat-step>
<qualifications-form [qualifications]="combined.qualifications"></qualifications-form>
</mat-step>
</mat-vertical-stepper>
</ng-container>
Также вы можете использовать zip
чтобы ваши наблюдаемые загрузки ждали друг друга:
combinedLoading$: Observable<boolean> = zip(
this.categoriesLoading$,
this.qualificationsLoading$,
(categoriesLoading: boolean, qualificationsLoading: boolean) => {
return categoriesLoading && qualificationsLoading;
}
);