angular - Angular2 patchValue trycka värde in i array
Det verkar som att Angular2:s FormGroup.patchValue() inte lägger till nya element i en array.
Till exempel något som detta:
ngOnInit() {
this.form = this.formBuilder.group({
animal: [''],
school: this.formBuilder.group({
name: [''],
}),
students: this.formBuilder.array([this.formBuilder.control('Bob')])
});
setTimeout(() => this.form.patchValue({
animal: 'cat'
school : {name: 'Fraser'},
students: ['Bob gets edited', 'This will not show']
}), 250);
}
Kommer endast uppdatera det första elementet i "students" men det kommer inte infoga det andra elementet.
Vad skulle jag behöva göra för att få det att visa båda elementen?
Plunker här.
Svar #1
Tja, som silentsod sa, är det inte möjligt. För närvarande använder jag nedanstående som ett alternativ:
let controlArray = <FormArray>this.form.controls['apps'];
this.list.forEach(app => {
const fb = this.buildGroup();
fb.patchValue(app);
controlArray.push(fb);
});
Angular Team - Vi behöver en ny funktion något som PatchArray() som skulle patcha från en samling/objektgraf. Det är ett grundläggande användningsfall.
Svar #2
.patchValue() uppdaterar endast den befintliga FormArray, den kommer inte att ändra strukturen på din formulärmodell.
patchValue(value: any[], {onlySelf, emitEvent}?: {onlySelf?: boolean, emitEvent?: boolean}) : void Uppdaterar värdet av FormArray. Den accepterar en array som matchar kontrollens struktur och kommer att göra sitt bästa för att matcha värdena till de korrekta kontrollerna i gruppen.
Den accepterar både supermängder och delmängder av arrayen utan att ge ett fel.
Du behöver faktiskt pusha ett nytt element till arrayen för att det ska synas.
this.form.controls['students'].push(new FormControl('This will not show'));
Allt detta finns i FormArray-dokumentationen https://angular.io/docs/ts/latest/api/forms/index/FormArray-class.html
