angular - Angular/Typescript - 解决数组中的异步问题
问题描述
我们有 2 个数组Speisekarte和Essensplan - 我想调用方法printName来打印名称,我从 ID 中获取。
问题是,“名称”总是未定义的。
“错误类型错误:无法读取未定义的属性‘名称’”
如何修复模板中的方法中的异步?
模板(printName(essenName) 中的异步)
<div *ngFor="let i of essensplan"> <br />
<div><b>Woche : {{i.id}}</b></div> <br />
<button *ngFor="let id of i.essenProWoche" (click)="print(id)">Gericht
** {{printName(id)}} ** </button>
零件
ngOnInit() {
console.log("ngOnInite essensplan.component")
this.getSpeisekarte();
this.getEssensplan();
}
printName(id: number) {
this.essenName = this.speisekarte.find(i => i.id == id ).name
getSpeisekarte(): void {
this.essenService.getSpeisekarte()
.subscribe(speisekarte => this.speisekarte = speisekarte);
}
getEssensplan(): void {
this.essensplanService.getEssensplan()
.subscribe(essensplan => this.essensplan = essensplan)
}
解决方案
我不确定是否可以延迟整个组件,直到两个 HTTP 调用都完成。取而代之的是,您可以修改printName
以处理this.speisekarte
尚未加载的情况。然后,告诉组件一旦加载就重新加载。
零件
constructor(private changeDetector: ChangeDetectorRef) {}
ngOnInit() {
console.log("ngOnInite essensplan.component")
this.getSpeisekarte();
this.getEssensplan();
}
printName(id: number) {
const match = this.speisekarte.find(i => i.id == id );
return match ? match.name : "";
}
getSpeisekarte(): void {
this.essenService.getSpeisekarte()
.subscribe(speisekarte => {
this.speisekarte = speisekarte;
this.changeDetector.markForCheck();
});
}
getEssensplan(): void {
this.essensplanService.getEssensplan()
.subscribe(essensplan => {
this.essensplan = essensplan;
this.changeDetector.markForCheck();
});
}
现在,无论 HTTP 请求完成的顺序如何,模板都不会出错(尽管如果getEssensplan
在此之前完成,名称将为空白getSpeisekarte
注意:我更改printName
为返回一个值,因为这是显示它所必需的
推荐阅读
- python - PMML 模型是否允许基于多行数据的单一预测(通过聚合?)?
- javascript - 在另一个文件中导入 javascript 文件并使用 Node.js 进行编译
- python - 提取通过excel中的链接列出的.txt文件的4项信息
- javascript - 格式化使用无头 chrome 爬虫抓取的文本
- arrays - 分配数组不会增加结构大小
- python - 如何将数据框导出到 Excel 并仅打印新的数据框行?
- reactjs - React-Native redux 表单包
- javascript - 如何将变量传递给 VueJs 中的边框样式属性
- magento - 找不到持久卷声明“媒体”
- c# - c#方法重载选择错误的重载并编译