首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ngFor遍历对象数组中的对象数组?(角度8 +)

如何使用ngFor遍历对象数组中的对象数组?(角度8 +)
EN

Stack Overflow用户
提问于 2021-11-11 14:18:42
回答 1查看 287关注 0票数 1

我在这里搜索并找到了一些信息:Iterate array inside object Angular 6,但我无法让它正常工作。

我有一个API调用,它返回一个对象数组(DocumentHead):

其中每一个都有一个名为documents的对象数组:

每个DocumentHead总是有一个文档条目,所以下面的代码可以工作(某种程度上)

代码语言:javascript
复制
<li *ngFor="let docHead of DocumentHead;">
  {{docHead.documents[0].id}}
</li>

(代码{{docHead.documents.id}}表示未定义)

DocumentHead.documents.id将为这5个条目中的每个条目返回至少1个条目id。我想要的是,对于每个DocumentHead,它将列出我当前拥有的文档中的每个条目的id:

代码语言:javascript
复制
<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仅支持绑定到迭代对象,如数组。

(它不允许“let docs of docHead.documents,给出错误:类型DocumentsModel不可赋值给类型(DocumentsModel & NgIterable) |未定义|空)

来自Loop through array of JSON object with *ngFor (Angular 4)的试用代码

代码语言:javascript
复制
<div *ngFor="let recipient of docHead.documents | keyvalue">
  {{recipient.key}} --> {{recipient.value}}
</div>

并获得以下输出

这就是我想要的。(在html组件中遇到错误:参数类型DocumentsModel不可分配给参数类型{p: string: number | string | boolean…>)

如何在docHead.documents上迭代,使我的列表显示所有文档的id?

ETA模型和呼叫

DocumentHeadModel:

代码语言:javascript
复制
export class DocumentHeadModel {
 id: string;
 documents: DocumentsModel;
}


export class DocumentsModel {
 id: string;
}

呼叫:

代码语言:javascript
复制
getDocuments(id: any): Observable<DocumentHeadModel[]> {
   return this.http.get<DocumentHeadModel[]>(this.myURL?id=` + id);
 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-11 14:34:22

如果您有:

代码语言:javascript
复制
const documentHeads = [
    { 
        id: 1, 
        documents: [
            { id: 101, category: { name: 'Astrophysics' }}
        ] 
    },
    { 
        id: 2, 
        documents: [
            { id: 201, category: { name: 'Literature' }},
            { id: 202, category: { name: 'Mathematics' }} 
        ]
    }
];

你想要:

代码语言:javascript
复制
-- 1
    -- 101
-- 2
    -- 201
    -- 202

您将使用:

代码语言:javascript
复制
<ol>
    <li *ngFor="let head of documentHeads">
        <p>{{ head.id }}</p>
        <ol>
            <li *ngFor="let doc of head.documents">{{ doc.id }}</li>
        </ol>
    </li>
</ol>

如果您愿意:

代码语言:javascript
复制
-- 101
-- 201
-- 202

您将使用:

代码语言:javascript
复制
<ol>
    <ng-container *ngFor="let head of documentHead">
        <li *ngFor="let doc of head.documents">{{doc.id}}</li>
    </ng-container>
</ol>

注意,您希望在第二种情况下使用ng-container,因为您不希望在olli元素之间创建一个HTML元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69929833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档