typescript Angular 形式阵列插入

lsmd5eda  于 2022-12-24  发布在  TypeScript
关注(0)|答案(2)|浏览(138)

我尝试使用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来自一个循环,但它没有出现。
我做错了什么,它的价值没有更新?谢谢

ss2ws0br

ss2ws0br1#

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

这是我想出的另一个解决方案谢谢

p4rjhz4m

p4rjhz4m2#

尝试使用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"
}

相关问题