打字稿.FormGroup FormArray - 按值删除一个元素对象.Angular 2 4

use*_*867 47 typescript angular angular-reactive-forms formarray

this.formGroup = this.formBuilder.group({
    images: this.fb.array([])
});
Run Code Online (Sandbox Code Playgroud)

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

get images(): FormArray {
    return <FormArray>this.formGroup.controls.images;
}
Run Code Online (Sandbox Code Playgroud)

我的课程:

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

export class ImageResponse {
    id: number;
    url: string;
}
Run Code Online (Sandbox Code Playgroud)

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

"images": [
   {
    "id": 501
   },
   {
    "id": 502
   },
   {
    "id": 503
   }
]
Run Code Online (Sandbox Code Playgroud)

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

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

"images": [
   {
    "id": 501
   },
   {
    "id": 503
   }
]
Run Code Online (Sandbox Code Playgroud)

AJT*_*T82 88

FormArrayclass有removeAt哪个索引.如果您不知道索引,可以执行以下操作:

this.images.removeAt(this.images.value.findIndex(image => image.id === 502))
Run Code Online (Sandbox Code Playgroud)

  • 这是从FormArray中删除的正确方法.*不要*使用*formArray*.controls [i] .splice - 这将从数组中删除控件,但control*values*将保留在`FormArray`控件的`values`数组中. (10认同)

小智 10

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

delete(index){
    this.array.removeAt(index)
}
``
Run Code Online (Sandbox Code Playgroud)