angular - 对于来自解析器的数组,无法读取未定义的属性长度
问题描述
我有一个来自解析器的数组。
private _fetchBieren: Bier[];
private _fetchBrouwers: Brouwer[];
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.route.data.subscribe(items => this._fetchBrouwers = items['brouwers']);
this.route.data.subscribe(items => this._fetchBieren = items['mijnbieren']);
}
get mijnBieren$() {
return this._fetchBieren;
}
在我的 HTML 中,我想询问此解析器的长度时出现错误
无法读取未定义的属性“长度”
我认为这可能是因为我解决了一个 observable 并且当我做对时,它们没有长度。
<div *ngIf="mijnBieren$.length > 0; else empty">
<table class="table">
<thead>
<tr>
<th scope="col">Naam</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let bier of mijnbieren$">
<td>{{bier.naam}}</td>
</tr>
</tbody>
</table>
</div>
</div>
<ng-template #empty>
<div>Je lijst is leeg</div>
</ng-template>
我已经尝试过使用mijnBieren?.length
,但这也会返回一个空列表,即使在列表不为空的情况下也是如此。
我希望在有值时显示列表,如果没有我希望显示我的模板并说列表为空。
解决方案
this.route.data
异步生成数据,这就是您订阅它以便从中提取数据的原因。
以下是您可以执行的操作:
public mijnbieren$: Observable<Bier[]>;
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.mijnbieren$ = this.route.data.pipe(
map(items => items['mijnbieren'])
)
}
在您的模板中:
<div *ngIf="(mijnBieren$ | async as mijnBieren).length > 0; else empty">
<table class="table">
<thead>
<tr>
<th scope="col">Naam</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let bier of mijnbieren">
<td>{{bier.naam}}</td>
</tr>
</tbody>
</table>
</div>
<ng-template #empty>
<div>Je lijst is leeg</div>
</ng-template>
这里我们没有订阅 Observable。相反,我们将其映射为分配mijnbieren
给一个 property mijnbieren$
。然后我们使用async
模板中的管道来解开它。
推荐阅读
- java - 使用 Java Sound API 捕获声音时遇到 LineUnavailableException
- vue.js - VueJs 组件没有被模板替换
- google-bigquery - BigQuery 在 WHERE 子句中的 WITH 子句下引用子查询
- python - 使用 if 语句为 python 传递变量或其他函数
- javascript - 我如何制作计时器?
- javascript - 使用 AJAX 隐藏孩子的 div
- swift - Xcode 11 Swift 5 切换按钮
- r - 混合效应模型的 Cohen d
- c++ - QApplication setFont() 和 QTimer
- mapping - 如何仅根据其 URL 验证来自 Wiremock 部署到远程主机的请求?