Forms 添加到反应形式数组的开头

Forms 添加到反应形式数组的开头,forms,angular,angular-reactive-forms,Forms,Angular,Angular Reactive Forms,请参阅相关的文件 如果运行此操作,然后单击“添加”按钮,将向数组中添加一个新条目,但表单视图不反映表单状态,而是第一个条目重复,最后一个条目消失 如果有人对我做错了什么有任何想法或指导,我会非常感激,因为我一直被困在一项看似简单的任务中 我试图尽可能地遵循官方的Angular反应式表单指南来构建这个示例。似乎Angular在跟踪表单中对象的索引时遇到了问题。这可以通过使用trackBy解决。使用以下函数将其添加到迭代中: <div *ngFor="let detail of detail

请参阅相关的文件

如果运行此操作,然后单击“添加”按钮,将向数组中添加一个新条目,但表单视图不反映表单状态,而是第一个条目重复,最后一个条目消失

如果有人对我做错了什么有任何想法或指导,我会非常感激,因为我一直被困在一项看似简单的任务中


我试图尽可能地遵循官方的Angular反应式表单指南来构建这个示例。

似乎Angular在跟踪
表单中对象的索引时遇到了问题。这可以通过使用
trackBy
解决。使用以下函数将其添加到迭代中:

<div *ngFor="let detail of detailArray.controls; let i=index; trackBy:trackByFn" [formGroupName]="i">

您的

似乎无法在
格式阵列中跟踪对象的索引。这可以通过使用
trackBy
解决。使用以下函数将其添加到迭代中:

<div *ngFor="let detail of detailArray.controls; let i=index; trackBy:trackByFn" [formGroupName]="i">

你的

“在这里复制粘贴的代码太多了”-然后把它缩减为一个,这是在这里提问的工作的一部分。我们在这里讨论的一个最小的例子就是这么多的代码哈,你读过文档了吗?有一个
insert
方法,您可以指定
索引
@developer033我正在使用这个insert方法,您可以在plunker中app.js的第83行看到这个方法。它插入到模型中很好,只是渲染视图没有反映模型的状态。我所说的模型是指FormGroup和相关的FormArray。非常有趣的问题。推的很好。你有没有检查过angular git hub的问题。“这里的代码太多了,无法复制粘贴”-然后将其缩减为a,这是在这里提问的工作的一部分。angular在这里谈论的一个最小的例子就是这么多的代码。哈哈哈,你看过文档了吗?有一个
insert
方法,您可以指定
索引
@developer033我正在使用这个insert方法,您可以在plunker中app.js的第83行看到这个方法。它插入到模型中很好,只是渲染视图没有反映模型的状态。我所说的模型是指FormGroup和相关的FormArray。非常有趣的问题。推的很好。你检查过angular git hub问题了吗?谢谢,这解决了问题,我不知道trackByYou欢迎,很高兴我能帮上忙!:)是的,当我们处理基元类型时,通常(仅)需要trackBy,但事实并非如此。但是,当您在数组的开头插入值,而不是仅仅在数组的末尾推送一个新值时,Angular显然很难跟踪索引(这在没有trackBy的情况下有效)。这其实很有趣:)谢谢你解决了这个问题,我不知道这条赛道。欢迎你,很高兴我能帮上忙!:)是的,当我们处理基元类型时,通常(仅)需要trackBy,但事实并非如此。但是,当您在数组的开头插入值,而不是仅仅在数组的末尾推送一个新值时,Angular显然很难跟踪索引(这在没有trackBy的情况下有效)。这其实很有趣:)
trackByFn(index: any, item: any) {
  return index;
}