Angular 角形阵列嵌件

Angular 角形阵列嵌件,angular,typescript,angular-forms,angular4-forms,Angular,Typescript,Angular Forms,Angular4 Forms,我正在尝试使用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([]), }); 我有一个输入,在

我正在尝试使用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));
}
onSetsChange(集合、索引){
var setsFormArray=this.myForm.controls.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>

{{set}}
exerciseIndexI pass来自一个没有显示的循环


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

尝试使用
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"
}
onSetsChange(集合、索引){
var setsFormArray=this.myForm.controls.sets;
(SETSFORMARY.at(索引)).patchValue(集合);
控制台日志(索引);
控制台日志(setsFormArray);
}

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

为什么不通过
[(ngModel)]
使用双向数据绑定来处理值?@commercialsequestion因为表单控件更强大、更清晰?@oMpamparos您的问题还不清楚。为什么要使用一个数组中的索引将同一索引中的值插入到另一个数组中?如果您希望按我试图在单击时更新表单数组元素的相同索引保留值,则可能应该将
FormArray
转换为
FormGroup
。我是一个有棱角的新手,我读到formControls是构建表单的最佳选择。知道我为什么不能更新数组的元素吗?@smnbbrv我正在尝试使用外部索引,它是使用myForm组中的相同索引更新集合数组元素的exerciseIndex。我不想推送新值。我想用新值更新旧值。那么您想更改FormControl还是更改FormControl的值?我想通过索引补丁值更改表单数组中的表单控件值?-更新了我的答案
onSetsChange(sets, index){
    var setsFormArray = <FormArray>this.myForm.controls.sets;
    (setsFormArray.at(index)).patchValue(sets);
    console.log(index);
    console.log(setsFormArray);
}