我有primeng dropdown和两个服务调用,一个调用获取下拉选项,另一个调用获取模型绑定数据。一旦我保存了选定的值并重新加载页面,偶尔就不会显示选定的值。我相信这是因为服务调用的异步性质。我猜模型值服务调用是在加载所有下拉选项之前完成的。
ngOnInit {
this.drpOption = this.ddOptionSrv.getDrpOption();
this.ddValueSrv.getDrpModelVal().subscribe(data => {
this.drValue = data
})
}模板代码:
<p-dropdown [options]="drpOption | async" [(ngModel)]="drValue"></p-dropdown>如何确保dropdown模型值在dropdown options加载后加载,而不会将模型服务全部移动到options调用的subscribed方法中(保持异步性质)?
发布于 2020-09-14 03:06:31
一种可能的解决方案是使用combineLatest,让我们看一个更简单的示例(省略导入):
@Component({
selector: "my-app",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent implements OnInit {
data$: Observable<[number, number]>;
private first$: Observable<number> = interval(1000);
private second$: Observable<number> = interval(2000);
ngOnInit(): void {
this.data$ = combineLatest([this.first$, this.second$]);
}
}模板将是:
<ng-container *ngIf="data$ | async as data">
<div>first$ = {{ data[0] }}</div>
<div>second$ = {{ data[1] }}</div>
</ng-container>这样,async | data$将等待两个可观测对象的第一次发射,并在每次发射时,从每个发射中发出最新的值。
此外,如果两个可观察对象仅发射一次,请使用forkJoin而不是combineLatest。
您可以在this stackblitz中运行演示
https://stackoverflow.com/questions/63872870
复制相似问题