3

我正在尝试使用 insert() 更新 formArray 上的特定值。我在 ngOninit() 上初始化表单,如下所示:

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来自一个没有显示的循环。

我做错了什么以及它没有更新的价值?谢谢

4

2 回答 2

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

这是我想出的第二个答案。谢谢

于 2017-09-27T13:37:22.477 回答
0

尝试使用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"
}
于 2017-09-27T13:07:18.363 回答