TypeScript. FormGroup FormArray - poista vain yksi elementti arvojen perusteella. Angular 2 4


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

Lisään uuden elementin näin: this.images.push(new FormControl(new ImageCreateForm(this.imageResponse.id)));

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

Minun luokkani:

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

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

Kun lisäsin kuvia, silloin minun {{ formGroup.value | json }} on:

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

Haluan poistaa kuvia (esimerkiksi vain kuvan, jonka id=502) formGroup-lomakkeelta ennen kuin lähetän lomakkeeni POST-pyynnön. Onko se mahdollista? Yritin käyttää reset-metodia, mutta tämä poistaa kaikki elementit: this.images.reset({"id":image.id});. Missä image on ImageResponse-objekti.

Tulos: {"images": [ null, null, null ]}, mutta minä haluan:

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

Vastaus #1

FormArray-luokalla on removeAt, joka ottaa parametrikseen indeksin. Jos et tiedä indeksiä, voit käyttää kiertotapaa:

// 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)

Vastaus #2

Angularin reaktiivisissa lomakkeissa formArray-oliolla on metodi nimeltä removeAt(). Voit käyttää sitä antamalla poistettavan indeksin:

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

Aiheeseen liittyviä artikkeleita