У меня есть ng-контейнер, который описывает все мои возможные шаблоны полей формы, по сути, на большом операторе switch в зависимости от метаданных поля:
<ng-template #dynamicFormField let-field="inputField">
<div *ngIf="field.dataTypeName == 'ShortText'">
<mat-form-field class="col-md-6">
<input matInput type="text" [placeholder]="field.attributeLabel" [formControlName]="field.attributeName">
</mat-form-field>
</div>
<div *ngIf="field.dataTypeName == 'LongText'">
<mat-form-field class="col-md-12">
<input matInput type="text" [placeholder]="field.attributeLabel" [formControlName]="field.attributeName">
</mat-form-field>
</div>
<div *ngIf="field.dataTypeName == 'Number'">
<mat-form-field>
<input matInput type="number" [placeholder]="field.attributeLabel" [formControlName]="field.attributeName">
</mat-form-field>
</div>
<ng-template>
У меня есть базовая группа форм, тогда одно свойство группы форм - это массив форм, каждый элемент которого имеет свою собственную группу форм. Например, модель данных выглядит примерно так:
{
name: 'Article Name',
description: 'Some description of the article',
sections: [
{
sectionName: 'Rich text section',
sectionContent: 'Some rich text'
},
{
sectionName: 'Second section',
sectionContent: 'Some rich text'
}
]
}
где каждое из этих полей имеет соответствующие метаданные, описывающие его свойства формы.
Я хочу иметь возможность повторно использовать оператор переключения ввода как в базовой группе форм, так и в группах форм в массиве форм. Однако внутренняя часть ng-контейнера не может получить доступ к группе форм, указанной входом formGroupName в массиве форм:
<div *ngFor="let field of this.sectionTypeSchemas[section.value.sectionTypeId]">
<div *ngIf="field.isVisible != false" formGroupName="{{i}}">
<ng-container *ngTemplateOutlet="dynamicFormField;context:{ inputField:field }"></ng-container>
</div>
</div>
Ошибка, с которой я сталкиваюсь, в основном заключается в том, что Angular не может найти элементы управления, которые находятся внутри FormGroups формального массива (то есть sectionName из модели данных), хотя нет проблем с поиском элементов управления, соответствующих элементам управления базовой formgroup (имя и описание из модель данных). Есть ли способ вручную передать ссылку на группу форм в контейнер ng? Краткий пример можно увидеть здесь.