【发布时间】:2021-11-11 14:18:42
【问题描述】:
我在这里搜索并找到了一些信息:Iterate array inside object Angular 6 但我无法使其正常工作。
我有一个 API 调用,它返回一个对象数组(DocumentHead):
其中的每一个都有一个名为文档的对象数组:
每个 DocumentHead 总是有一个文档条目,所以下面的代码可以工作(有点)
<li *ngFor="let docHead of DocumentHead;">
{{docHead.documents[0].id}}
</li>
(代码 {{docHead.documents.id}} 表示未定义)
DocumentHead.documents[0].id 将为 5 个条目中的每一个返回至少 1 个条目 ID。 我想要的是对于每个 DocumentHead,它将列出文档中每个条目的 id 我目前有这个:
<li *ngFor="let docHead of DocumentHead;">
<div *ngFor="let docs of docHead.documents[i]; let i = index; ">
<h3> {{docs.category.name}} </h3>
</div>
</li>
但出现错误:找不到“object”类型的不同支持对象“[object Object]”。 NgFor 只支持绑定到 Arrays 等 Iterables。
(它不允许“让 docHead.documents 的文档,给出错误: 类型 DocumentsModel 不可分配给类型 (DocumentsModel & NgIterable) |未定义 |空值 )
来自Loop through array of JSON object with *ngFor (Angular 4)的尝试代码
<div *ngFor="let recipient of docHead.documents | keyvalue">
{{recipient.key}} --> {{recipient.value}}
</div>
得到这个输出
这接近我想要的。 (在 html 组件中出现错误: 参数类型 DocumentsModel 不可分配给参数类型 {[p: string]: number |字符串 |布尔值…>)
如何遍历 docHead.documents 以便我的列表显示所有文档的 id?
ETA 模型和调用
DocumentHeadModel:
export class DocumentHeadModel {
id: string;
documents: DocumentsModel;
}
export class DocumentsModel {
id: string;
}
呼叫:
getDocuments(id: any): Observable<DocumentHeadModel[]> {
return this.http.get<DocumentHeadModel[]>(this.myURL?id=` + id);
}
【问题讨论】:
-
let docs of docHead.documents[i];应该是let docs of docHead.documents我认为。您想遍历每个 DocumentHead 的所有文档,而不仅仅是一个,对吧? -
它不允许“让 docHead.documents 的文档,给出错误:类型 DocumentsModel 不可分配给类型 (DocumentsModel & NgIterable) |未定义 |空
-
你的数据有 typedef 吗?你能包括它吗?在我看来,文档是一个数组,如果您以不同的方式定义它可能会导致错误。
-
是的,如果您希望每个人拥有多个
DocumentModel,请将DocumentHeadModel.documents更改为DocumentModel[]。相反,如果您希望DocumentModel每个头有多个标识符,则将DocumentModel.id更改为string[]。 -
@DM 我更改了它并且它有效。谢谢你。现在觉得有点傻。会接受你的回答