Если вы не используете 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