嵌套数组的角度PatchValue

时间:2020-02-14 08:29:29

标签: angular nativescript angular-reactive-forms

我想在另一个数组中修补一个数组的值,我可以通过使用

来实现

this.myForm.value.array1[index1].array2[index2].type = type;

尽管它不会仅在代码中的表单值中更新屏幕上的表单值,但我在下面的代码中修补了第一个数组中的值,并且它更新了屏幕上的值,我只是无法将其写成到达第二个数组

(<FormArray>this.myForm.controls['array1']).at(index1).get("type").patchValue(type);

谢谢:)

1 个答案:

答案 0 :(得分:2)

如果不使用setValue,则Angular会更改值,但Angular不会反映在输入中,请不要将输入标记为已触摸...

所以

((this.myForm.get('array1') as FormArray)
       .at(index1).get('array2') as FormArray)
       .at(index2).get("type").patchValue(type);

this.form.get('array1.'+index1+'.array2.'+index2+'.type').patchValue(type)

注意1:array1.index是使用get访问数组元素的方式,因此array1.0获取数组的第一个元素,array1.1获取第二个元素...

注意2:建议使用get(name)vs controls [name]方法

更新,我不知道您的要求,但是如果您想简单地控制对象数组,可以使用FormGroup的FormArrays的FormArray。

嗯,有些像

formArray=new FormArray([
      new FormArray([
        new FormGroup({
           type:new FormControl('uno')
        }),
        new FormGroup({
           type:new FormControl('dos')
        }),
      ]),
      new FormArray([
        new FormGroup({
           type:new FormControl('tres')
        }),
        new FormGroup({
           type:new FormControl('cuatro')
        }),
      ])
    ]) 

可以在html中管理

<div *ngFor="let array of formArray.controls">
  <div *ngFor="let group of array.controls" [formGroup]="group">
    <input formControlName="type">
  </div>
</div>

在这种情况下,请使用

(this.form.at(0) as FormArray).at(1).get('type').patchValue('new');

请参阅stackblitz