【问题标题】:Angular: Nested ngFor on array of objects with FormArrayAngular:使用 FormArray 在对象数组上嵌套 ngFor
【发布时间】:2021-03-28 18:06:33
【问题描述】:

我对嵌套的 ngFor 有问题,也许我用错了, 在 Home 组件中,我有一个空的对象数组 designInputs:{}[] = []; 我通过在另一个组件中使用 Reactive-form 来填充它,每个表单都作为一个对象存储在这个数组中,表单是使用 FormArray 构建的,所以它不是固定大小的表单,然后每个对象都有它自己的长度。

在 home 组件中,我正在循环遍历该对象数组 designInputs

<div *ngFor="let form of designInputs;let i = index"> //number of forms
 <h5 class="card-title" *ngFor="let input of form ;let j =index" > {{input [i]}}</h5> //number of inputs in each form
</div>

第一个循环应该负责多少个对象(表单填充),所以要获取整个表单对象 第二个循环是获取每个表单保存的输入值[每个表单(对象)有不同数量的输入。

编辑: 在另一个组件中,我在名为“designForm”的表单中有名为“newFiles”的 formArray,然后将其转换为我这样做的对象:

let inputsValues = {...this.designForm.get('newFiles').value};

之后,我将它传递给一个服务,然后传递给 home 组件,因此例如 designInputs 应该看起来像这样:

[
{0:"input1Value",
 1:"input2Value"
},
{0:"input1Value",
 1:"input2Value",
 2:"input3Value"
}
]

所以我之前无法初始化它,因为目前我不知道每个对象将包含多少项。

这里出了什么问题以及如何解决?

【问题讨论】:

  • 认为您可以在使用 FormBuilder 参考的地方添加初始化代码。盲目虽然 id 说尝试这样做,但如果您说数组中的每个对象都是一个表单数组,那么您需要获取控件,因此将 &lt;h5&gt; 循环中的 input 更改为 input['controls']
  • 嘿,谢谢你的帮助,我试过了,实际上它给了我一个空的 div,我编辑了帖子以回复第一个注释,你可以检查一下吗。@AshwynHorton

标签: angular nested-loops angular-reactive-forms ngfor formarray


【解决方案1】:

我找到了我正在寻找的解决方案,使用名为“|keyvalue”的内置管道

<div *ngFor="let form of designInputs;let d = index">
    <h5 class="card-title" *ngFor="let input of form | keyvalue">{{input.value}}</h5>
</div> 

【讨论】:

    【解决方案2】:

    如果您在编辑中所说的是这种情况,那么您的 HTML 应该如下所示:

    <div *ngFor="let form of designInputs">
       <h5 class="card-title" *ngFor="let input of form" >{{input}}</h5>
    </div>
    

    它可能不起作用,我的假设是因为数组只是键是数字的对象,所以它仍然应该迭代。但是如果迭代不起作用,那么尝试这样:

    <div *ngFor="let form of designInputs">
       <h5 class="card-title" *ngFor="let input of Object.values(form)" >{{input}}</h5>
    </div>
    

    编辑

    根据您的解决方案:

    <div *ngFor="let form of designInputs">
       <h5 class="card-title" *ngFor="let input of form | keyvalues" >{{input.value}}</h5>
    </div>
    

    【讨论】:

    • 再次感谢您的帮助,不幸的是,这两种方法都没有像您刚才所说的那样工作第一个,因为它是对象而不是可迭代的,第二个它抱怨 object.values 适用于未定义的变量,所以它可以不要读它。但我使用内置管道“keyvalue”找到了解决方案,我会发布它
    • 那么酷……我实际上是在其他解决方案中制作自定义管道,我猜 Angular 当时没有管道……不过谢谢,很棒的东西
    猜你喜欢
    • 2017-10-12
    • 2019-05-28
    • 2019-02-25
    • 2018-10-14
    • 2020-02-20
    • 2019-02-04
    • 2019-04-02
    • 1970-01-01
    • 2022-12-20
    相关资源
    最近更新 更多