2017-09-27 48 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); 
} 

这是第二个答案,我想通了。谢谢

相关问题