2017-10-02 3 views
1

Ich verwende eckigen Formbuilder, um eine verschachtelte Form zu erstellen. Wie setze ich verschachtelten Formular quantity Feld Wert für jede Formulargruppe innerhalb updateValue() Funktion im folgenden Code.Angular 2 geschachtelt Formularsatz Wert

ngOnInit() { 
    this.fastPostingForm = this.fb.group({ 
     Charges: this.fb.array([ 
     this.initCharge() 
     ]) 
    }); 
} 

initCharge(){ 
    return this.fb.group({ 
     room: ['', Validators.required], 
     amount: ['', Validators.required], 
     quantity: ['', Validators.required], 
    }); 
} 

UpdateValue(i) { 
    this.fastPostingForm.controls.Charges[i].controls['quantity'].setValue(2); // This is not working 
} 
+0

Können Sie die genaue Fehlermeldung, die Sie bekommen? – yurzui

+0

core.es5.js: 1020 ERROR TypeError: Kann die Eigenschaft 'controls' von undefined nicht lesen –

+0

Sie vermissen ein 'controls'? 'this.fastPostingForm.controls.Charges.controls [i] .controls ['quantity']. setValue (2);' Überlegen Sie sich vielleicht, die verschachtelte Gruppe als Parameter anstelle von index zu übergeben, damit Sie nicht verrückt werden müssen mit diesen langen Pfaden :) – Alex

Antwort

1

es sein sollte:

(this.fastPostingForm.controls.Charges as FormArray).controls[i].controls['quantity'] 
                .setValue(2) 

oder

this.fastPostingForm.get(['Charges', i, 'quantity']).setValue(2); 

oder

this.fastPostingForm.get(`Charges.${i}.quantity`).setValue(2); 
         ^^^ 
        backtick 

oder Sie sogar auf patchValue Methode verwenden können Ihr Formular:

this.fastPostingForm.patchValue({ 
    Charges: [...Array(i), { quantity: '2' }] 
}); 
+0

zweite arbeitet für mich. –

+0

Versuchen Sie den ersten, den ich es aktualisierte. Nur von falschem Platz kopiert – yurzui

+0

erste gibt mir folgenden Fehler Eigenschaft 'Steuerelemente' existiert nicht auf Typ 'AbstractControl'. –