2017-10-02 1 views
1

J'utilise un constructeur de formes angulaire pour créer une forme imbriquée. Comment puis-je définir la valeur de champ quantity de forme imbriquée pour chaque groupe de formulaire dans la fonction updateValue() dans le code suivant.Valeur de consigne de forme emboîtée angulaire 2

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

Pouvez-vous envoyer le message d'erreur exact que vous obtenez? – yurzui

+0

core.es5.js: 1020 ERREUR TypeError: Impossible de lire la propriété 'controls' de unsdefined –

+0

Il vous manque un 'controls'? 'this.fastPostingForm.controls.Charges.controls [i] .controls ['quantity']. setValue (2);' Peut-être envisager de passer le groupe imbriqué comme paramètre au lieu de l'index, de sorte que vous n'avez pas besoin de devenir fou avec ces longs chemins :) – Alex

Répondre

1

Il devrait être:

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

ou

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

ou

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

ou vous pouvez même utiliser patchValue méthode sur votre formulaire:

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

deuxième travaille pour moi. –

+0

Essayez le premier je l'ai mis à jour. Juste copié à partir du mauvais endroit – yurzui

+0

le premier qui me donne l'erreur suivante La propriété 'controls' n'existe pas sur le type 'AbstractControl'. –