Angular PatchValue вложенных массивов - PullRequest
0 голосов
/ 14 февраля 2020

Я хочу пропатчить значение массива внутри другого массива, я могу добиться этого с помощью

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

, хотя оно не обновляет значение формы только на экране в форме значений в коде, я код ниже, чтобы исправить значения в первом массиве, и он обновляет значения на экране, я просто не могу записать его, чтобы иметь возможность добраться до второго массива

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

спасибо:)

1 Ответ

2 голосов
/ 14 февраля 2020

Если вы не используете 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: использование get для доступа к элементу массива - это способ array1.index, поэтому array1.0 получает первый элемент массива, array1.1 второй. .

ПРИМЕЧАНИЕ2: рекомендуется использовать метод get (name) vs controls [name]

Update Я не знаю ваши требования, но если вам нужно простое управление массив массивов объекта, вы можете использовать FormArray FormArrays из FormGroup.

Ну, некоторые, как

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')
        }),
      ])
    ]) 

Может быть Mannage в 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

...