gpt4 book ai didi

arrays - Angular2 - ngFor 单个对象与数组

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

我有一种情况,我从我的数据库中收到一个数据对象,其中包含文件版本的记录。可能有 5 个版本(5 条记录)或返回一个版本。

我的问题是我正在使用 ngFor遍历数据数组并将它们打印到表中。如果只返回一条记录,则数据不再是对象数组,而只是一个对象。

<tbody class="ruleVersions">
<tr *ngFor="let m of mapData.ruleVersion.x">
<td class="small">V {{ m.RuleVersion }}.0</td>
<td [innerHtml]="m.CreatorNTID | ntidLink"></td>
<td class="small">{{ m.VersionNotes ? m.VersionNotes : 'N/A' }}</td>
<td class="small">{{ m.BasedOnRuleVersionID ? m.BasedOnRuleVersionID : 'N/A' }}</td>
<td class="small">{{ m.MetaInsertUtc }}</td>
</tr>
</tbody>

多条记录:

enter image description here

单个记录:

enter image description here

这会带来一个问题,因为 ngFor设置为遍历数组。由于单条记录不是像多条记录那样的对象数组,因此会抛出此错误:

Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.

解决此问题的最佳方法是什么?是否有任何 Angular 我可以用来将数据视为数组,即使它不是,也许是某种管道?

我能想到的唯一其他方法是通过函数传递整个对象,如果它是单个记录,则让它将对象插入数组。这就带来了不希望每条记录都是数组的问题。

只是好奇是否有任何内置的 Angular 方法来解决这个问题?

更新:

我通过创建管道解决了这个问题。

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({ name: 'isArray' })
export class IsArrayPipe implements PipeTransform {
transform(x): any {
return Array.isArray(x) ? x : [x];
}
}

<tr *ngFor="let m of mapData.ruleVersion.x | isArray: x">

最佳答案

收到响应后,您可以检查它是否为数组。如果它不是一个对象,你可以在一个数组中设置对象,所以在服务中是这样的:

getData() {
return this.http.get('url')
.map(response => {
let res = response.json();
if(!Array.isArray(res)) {
return [res]
}
return res;
})
}

所以现在,无论您是获取数组还是对象,它始终可以使用 *ngFor 进行迭代,因为组件始终接收数组。

关于arrays - Angular2 - ngFor 单个对象与数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45595896/

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