76
this.formGroup = this.formBuilder.group({
    images: this.fb.array([])
});

我以这种方式添加新元素: this.images.push(new FormControl(new ImageCreateForm(this.imageResponse.id)));

get images(): FormArray {
    return <FormArray>this.formGroup.controls.images;
}

我的课程:

export class ImageCreateForm {
    id: number;
    constructor(id: number) {
        this.id = id;
    }
}

export class ImageResponse {
    id: number;
    url: string;
}

当我添加图像时,我{{ formGroup.value | json }}的是:

"images": [
   {
    "id": 501
   },
   {
    "id": 502
   },
   {
    "id": 503
   }
]

我想在发送表单 POST 请求时删除之前的图像(例如仅带有 的图像id=502) 。formGroup是否可以?我尝试了使用reset方法,但这删除了所有元素: this.images.reset({"id":image.id});. 它image是一个ImageResponse对象。

结果:{"images": [ null, null, null ]},但我想要:

"images": [
   {
    "id": 501
   },
   {
    "id": 503
   }
]
4

3 回答 3

194

FormArray类有removeAt它采用索引。如果你不知道索引,你可以做一个解决方法:

this.images.removeAt(this.images.value.findIndex(image => image.id === 502))
于 2017-10-14T11:53:30.187 回答
15

在 Angular Reactive Forms 中,formArray有一个名为removeAt(). 您可以通过传递要删除的索引来使用它:

delete(index){
    this.array.removeAt(index)
}
``
于 2020-07-07T12:38:22.493 回答
1

如果要从 FormGroup 中删除特定键的值,可以使用以下代码 -

this.formGroupF.controls[value].patchValue(null)
于 2021-05-13T12:07:25.387 回答