2017-09-27 47 views
2

我想使用insert()更新formArray上的特定值。 我對ngOninit()這樣的初始化形式: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([]), 
}); 

我有一個輸入其中的變化我調用這個函數的,但是當我嘗試插入與數組的索引的新值,我得到推動的價值。

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

的HTML代碼如下:

<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> 

exerciseIndex我通過是一個循環,它並沒有顯示出來。

我做錯了什麼,它的價值沒有更新?感謝您使用patchValue

+0

爲什麼不通過'[(ngModel)]'使用雙向數據綁定來處理值? –

+0

@CommercialSuicide,因爲FormControls的方式更強大和清晰? – smnbbrv

+0

@oMpamparos你的問題不清楚。爲什麼使用一個數組中的索引將相同索引**的值插入另一個數組中?如果你想保持值相同索引 – smnbbrv

回答

0

嘗試: -

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

我不想推新的價值。我想用新的值更新舊值。 – oMpamparos

+0

所以你想改變FormControl或更改FormControl的值? –

+0

我想改變它的形式數組內的表格控制值由它的索引 – oMpamparos

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

這是第二個答案,我想通了。謝謝

相關問題