2017-09-27 1 views
2

J'essaye de mettre à jour une valeur spécifique sur un formArray en utilisant insert(). j'initialiser formulaire ngOninit() comme ceci:Angular FormArray Insert

this.myForm = this.fb.group({ 
    exercises: this.fb.array([]), 
    type: new FormControl(), 
    day: new FormControl(), 
    sets: this.fb.array([]), 
    reps: this.fb.array([]), 
}); 

J'ai une entrée où le changement que j'appelle la fonction ci-dessous mais lorsque je tente d'insérer une nouvelle valeur avec l'index du tableau que je reçois la valeur poussé.

onSetsChange(sets, index){ 
    var setsFormArray = <FormArray>this.myForm.controls.sets; 
    setsFormArray.insert(index, new FormControl(sets)); 
} 

Le code HTML est ci-dessous:

<div class="col-md-3"> 
    <select class="form-control input-sm" (change)="onSetsChange($event.target.value, exerciseIndex)"> 
    <option *ngFor="let set of sets; let i = index;">{{set}}</option> 
    </select> 
</div> 

Le exerciseIndex Je passe est d'une boucle qui ne se présente pas.

Qu'est-ce que je fais mal et la valeur qu'elle ne met pas à jour? Merci

+0

Pourquoi n'utilisez-vous pas simplement la liaison de données bidirectionnelle via '[(ngModel)]' pour travailler avec des valeurs? –

+0

@CommercialSuicide parce que les FormControls sont beaucoup plus puissants et clairs? – smnbbrv

+0

@oMpamparos votre problème n'est pas clair. Pourquoi utilisez-vous l'index d'un tableau pour insérer les valeurs ** du même index ** dans un autre tableau? Vous devriez probablement transférer votre 'FormArray' dans' FormGroup' si vous voulez garder les valeurs par le même index. – smnbbrv

Répondre

0

Essayez d'utiliser patchValue: -

public ngOnInit() { 
    const arr = new FormArray([ 
       new FormControl(), 
       new FormControl() 
      ]); 

    let control = arr.controls[0]; 
    setTimeout(() => control.patchValue("new-val"), 250); // Set value to "new-val" 
    setTimeout(() => console.log(control.value), 350); // Logs "new-val" 
} 
+0

Je ne veux pas pousser la nouvelle valeur. Je veux mettre à jour l'ancienne valeur avec la nouvelle. – oMpamparos

+0

Donc vous voulez changer le FormControl ou changer la valeur du FormControl? –

+0

Je veux changer la valeur de contrôle de formulaire qui est à l'intérieur du tableau de formulaire par son index – oMpamparos

0
onSetsChange(sets, index){ 
    var setsFormArray = <FormArray>this.myForm.controls.sets; 
    (setsFormArray.at(index)).patchValue(sets); 
    console.log(index); 
    console.log(setsFormArray); 
} 

c'est une deuxième réponse que je compris. Merci