Используя этот в качестве ссылки, я реплицировал создание группы динамических c вложенных форм с использованием реактивных форм.
Но он запускает обнаружение изменений несколько раз при добавлении нового сформировать группу в массив форм.
мой код
компонент. html
<button mat-flat-button color="primary" (click)="addMaterial()">Add</button>
<form [formGroup]="positionFormGroup" novalidate>
<table formArrayName="positionInfos">
<div *ngFor="let data of Controls.controls; let i = index">
<div [formGroupName]="i">
<input type="text" formControlName="idMaterial" [matAutocomplete]="materialAuto">
<mat-autocomplete #materialAuto="matAutocomplete">
<mat-option *ngFor="let option of materialFilteredOptions | async" [value]="option.description">
{{option.description}}
</mat-option>
</mat-autocomplete>
</div>
</div>
</table>
</form>
component.ts
export class AppComponent {
positionFormGroup: FormGroup;
materialControl: FormControl = new FormControl('');
materialFilteredOptions: Observable<{ description: string; }[]>;
options = [
{ description: 'item1' },
{ description: 'item2' },
{ description: 'item3' },
{ description: 'item4' }
]
constructor(private formBuilder: FormBuilder) {
}
ngOnInit(): void {
this.materialFilteredOptions = this.materialControl.valueChanges
.pipe(
startWith(''),
map(value => this.options)
);
this.positionFormGroup = this.formBuilder.group({
positionInfos: new FormArray([])
});
this.addMaterial();
}
ngDoCheck(){
console.log('triggered');
}
addMaterial() {
(this.positionFormGroup.get('positionInfos') as FormArray).push(this.formBuilder.group({
rowID: '0',
position: '0',
idMaterial: 'item1',
quantity: 1,
isDeleted: false,
isActive: true
}));
}
confirm(){
console.log( this.positionFormGroup.get('positionInfos').value)
}
get Controls(){
console.log( (this.positionFormGroup.get('positionInfos') as FormArray));
return (this.positionFormGroup.get('positionInfos') as FormArray);
}
}
Также поделился консолью. когда я добавляю новую группу форм в массив форм, это происходило. Я не понимаю, почему он несколько раз запускал обнаружение изменений.
Информация о консоли
Пожалуйста, дайте мне знать, если я что-то упустил. Заранее спасибо