TypeScript. FormGroup FormArray - elimină doar un singur obiect element după valoare. Angular 2 4
this.formGroup = this.formBuilder.group({
images: this.fb.array([])
});
Adaug un element nou în acest mod: this.images.push(new FormControl(new ImageCreateForm(this.imageResponse.id)));
get images(): FormArray {
return <FormArray>this.formGroup.controls.images;
}
Cursurile mele:
export class ImageCreateForm {
id: number;
constructor(id: number) {
this.id = id;
}
}
export class ImageResponse {
id: number;
url: string;
}
Când am adăugat imagini, atunci {{ formGroup.value | json }} este:
"images": [
{
"id": 501
},
{
"id": 502
},
{
"id": 503
}
]
Vreau să elimin imaginile (de exemplu doar imaginea cu id=502) din formGroup înainte de a trimite cererea mea POST a formularului. Este posibil? Am încercat să folosesc metoda reset, dar aceasta elimină toate elementele: this.images.reset({"id":image.id});. Unde image este un obiect ImageResponse.
Rezultat: {"images": [ null, null, null ]}, dar eu vreau:
"images": [
{
"id": 501
},
{
"id": 503
}
]
Răspuns #1
Clasa FormArray are removeAt care ia indexul. Dacă nu cunoști indexul, poți face o soluție alternativă:
// findIndex returns -1 if not found
// `removeAt` wraps around from the back if given negative
const index = this.images.value.findIndex(image => image.id === 502)
if(index !== -1) this.images.removeAt(index)
Răspunsul #2
În Angular Reactive Forms, formArray are o metodă numită removeAt(). O poți folosi trecând un index pe care vrei să îl ștergi:
delete(index){
this.array.removeAt(index)
}
``
