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

Relaterade artiklar