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)
}
``
