Вам понадобится следующее для вашего сценария:
- Родитель
div
с formGroupName="schema"
. - Внутри этого,
div
с formArrayName="currencies"
. - Внутри этого,
div
с ngFor="let currencyGroup of currencyFormGroups; let i = index;"
.Обратите внимание, что currencyFormGroups
является геттером в вашем классе компонентов. - Внутри него
div
с [formGroupName]="i"
, где i
- это индекс, который мы создали на лету в *ngFor
. - Заметьте, что два
input
с formControlName="percentage"
и formControlName="currency"
соответственно.
.
Вот все эти шаги, переведенные в код:
import { Component } from '@angular/core';
import { FormGroup, FormControl, FormArray, Validators, FormBuilder } from '@angular/forms';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
createPromo: FormGroup;
constructor(private fb: FormBuilder) { }
ngOnInit() {
this.createPromo = this.fb.group({
'type': ['type'],
name: ['name', Validators.required],
description: ['description', Validators.required],
enabled: ['enabled', Validators.required],
promotion_type: ['promotion_type', Validators.required],
start: ['start', Validators.required],
end: ['end', Validators.required],
schema: this.fb.group({
currencies: this.fb.array([
this.fb.group({
percentage: 'percentage',
currency: 'ZAR'
}),
this.fb.group({
percentage: 'percentage',
currency: 'INR'
}),
])
}),
});
}
get currencyFormGroups() {
return (<FormArray>(<FormGroup>this.createPromo.get('schema')).get('currencies')).controls;
}
}
Шаблон:
<form [formGroup]="createPromo">
...
<div formGroupName="schema">
<div formArrayName="currencies">
<div *ngFor="let currencyGroup of currencyFormGroups; let i = index;">
<div [formGroupName]="i">
<input
type="text"
name="percentage"
formControlName="percentage">
<input
type="text"
name="currency"
formControlName="currency">
</div>
</div>
</div>
</div>
</form>
Вот Образец StackBlitz для вашей ссылки.
PS: Для простоты я рассмотрел все элементы управления формой как input
.Пожалуйста, внесите соответствующие изменения.