73 votes

TypeScript. FormGroup FormArray - supprime un seul objet élémentaire par valeur. Angular 2 4

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

J'ajoute un nouvel élément de cette façon : this.images.push(new FormControl(new ImageCreateForm(this.imageResponse.id)));

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

Mes cours :

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

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

Lorsque j'ai ajouté des images, alors mon {{ formGroup.value | json }} est :

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

Je veux supprimer les images (par exemple, seulement l'image avec id=502 ) de formGroup avant que j'envoie la requête POST de mon formulaire. Est-ce possible ? J'ai essayé d'utiliser reset mais cette méthode supprime tous les éléments : this.images.reset({"id":image.id}); . Où image il s'agit d'un ImageResponse objet.

Résultat : {"images": [ null, null, null ]} mais je veux :

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

185voto

AJT_82 Points 30605

FormArray La classe a removeAt qui prend l'index. Si vous ne connaissez pas l'index, vous pouvez faire un contournement :

this.images.removeAt(this.images.value.findIndex(image => image.id === 502))

23 votes

C'est la façon correcte de supprimer des données d'un FormArray. Ne fais pas ça. utiliser formArray .controls[i].splice - ce qui supprimera le contrôle du tableau mais le contrôle valeurs restera sur le values du tableau de l FormArray contrôle.

0 votes

Très utile, merci. Je me suis laissé entraîner à chercher l'épissure du tableau.

12voto

Amit Singh Points 61

Dans Angular Reactive Forms, formArray a une méthode appelée removeAt() . Vous pouvez l'utiliser en passant un index que vous voulez supprimer :

delete(index){
    this.array.removeAt(index)
}
``

0voto

surajmall Points 41

Si vous voulez supprimer la valeur d'une clé particulière du FormGroup, vous pouvez utiliser le code suivant -

this.formGroupF.controls[value].patchValue(null)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X