gpt4 book ai didi

javascript - Angular - 将两个 observables 组合在一个 ngIf 中

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:55 26 4
gpt4 key购买 nike

我有一个由单个可观察对象调节的步进器

<ng-container *ngIf="!(categoriesLoading$ | async); else loading">
<mat-vertical-stepper *ngIf="categories$ | async as categories">
<mat-step>
<categories-form [categories]="categories"></categories-form>
</mat-step>
</mat-vertical-stepper>
</ng-container>

现在我想添加另一个可观察的条件 qualifications$

类似的东西:

<ng-container *ngIf="!(categoriesLoading$ | async); else loading">
<mat-vertical-stepper *ngIf="categories$ | async as categories">
<mat-step>
<categories-form [categories]="categories"></categories-form>
</mat-step>
<mat-step>
<qualifications-form [qualifications]="qualifications"></qualifications-form>
</mat-step>
</mat-vertical-stepper>
</ng-container>

在 Controller 中:

categories$: Observable<Array<Category>>;
categoriesLoading$: Observable<boolean>;
qualifications$: Observable<Array<Qualification>>;
qualificationsLoading$: Observable<boolean>;

我怎样才能正确地做到这一点?

最佳答案

你可以看看 Rxjs zip combination operator 这可能对你有帮助。

https://www.learnrxjs.io/operators/combination/zip.html

https://rxmarbles.com/#zip

在您的 Controller 中,您可以创建一个新的可观察对象,例如:

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 让您的加载 observables 相互等待:

combinedLoading$: Observable<boolean> = zip(
this.categoriesLoading$,
this.qualificationsLoading$,
(categoriesLoading: boolean, qualificationsLoading: boolean) => {
return categoriesLoading && qualificationsLoading;
}
);

关于javascript - Angular - 将两个 observables 组合在一个 ngIf 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54882424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com