Я новичок в Angular, но я много пытался найти решение в Google, прежде чем пришел сюда.
Моя проблема:
Используя шаблонный подход, я пытаюсь создать вложенную форму, которая включает также поля ввода дочернего компонента. Чтобы зарегистрировать дочерний компонент в родительском объекте формы, в дочернем компоненте я добавил:
viewProviders: [ { provide: ControlContainer, useExisting: NgForm }
Он работает нормально, и входные данные дочернего компонента теперь интегрированы в родительский объект формы. Однако дочерний компонент упоминается более одного раза, поэтому его набор полей должен быть интегрирован в formobject более одного раза. Вместо этого поля ввода дочернего компонента добавляются только один раз. Я думаю, это связано с тем, что для полей ввода нужны уникальные имена, иначе они просто перезаписываются, или?
Для большей ясности я использую ngFor для l oop поверх конфигурации файл, содержащий информацию о том, как часто дочерний компонент необходимо загружать в родительский шаблон. Это шаблон родительского компонента, где I l oop поверх файла конфигурации. Я создаю аккордеон с Angular Bootstrap:
parent. html
<form (ngSubmit)="onSubmitJob()" #f="ngForm">
<div class="form-group">
<div *ngFor="let process of processMappings">
<div *ngIf="process.processId === selectedProcessingTool">
<div *ngFor="let input of process.inputs; let i = index">
<ngb-accordion
#acc="ngbAccordion"
activeIds="ngb-panel-0"
>
<ngb-panel title="{{ input.inputType }}">
<ng-template ngbPanelContent>
<child-component
*ngIf="
input.inputType == 'StaticSubsetDefinition';
"
></child-component>
</ng-template>
</ngb-panel>
</ngb-accordion>
</div>
</div>
</div>
</div>
</form>
Это шаблон дочернего компонента, который включает fieldset:
child. html
<fieldset ngModelGroup= "staticSubsetDefinition">
<div class="form-group">
<label for="value">Wert</label>
<input
style="max-width: 300px;"
class="form-control"
id="value"
placeholder=""
ngModel
name = "value"
required
/>
</div>
<div class="form-group">
<label class="my-1 mr-2" for="dataType">Datentyp</label>
<select
class="form-control"
id="dataType"
style="max-width: 300px;"
ngModel
name="dataType"
required
>
<option selected></option>
<option value="text">Text</option>
<option value="numeric">numerisch</option>
</select>
</div>
</fieldset>
Шаблон родительского элемента создает согласование с двумя панелями, поскольку дочерний элемент дважды загружается в шаблон . Однако formobject регистрирует только один, и я предполагаю, что это связано с тем, что входам нужны уникальные имена.
Поэтому мой вопрос: что я могу сделать, чтобы изменить имя поля ввода, например, добавив индекс в набор полей name?
Я не знаю, как добавить индекс к входным именам дочернего компонента, например, в for l oop. Как это сделать? Или есть другой способ указать Angular добавлять форму так часто, как она загружается в шаблон?
Я имею в виду что-то вроде этого между звездами (что неверно, я знаю, просто чтобы вы поняли, что я имею в виду):
<div *ngFor="let input of process.inputs; let i = index">
<ngb-accordion
#acc="ngbAccordion"
activeIds="ngb-panel-0"
>
<ngb-panel title="{{ input.inputType }}">
<ng-template ngbPanelContent>
<child-component
*ngIf="
input.inputType == 'StaticSubsetDefinition';
" **inputname == 'inputname_ + i'**
></child-component>
</ng-template>
</ngb-panel>
</ngb-accordion>
</div>
По сути, я не знать, как получить доступ к имени поля ввода из шаблона родительского компонента. Однако, если есть совершенно другой способ добавления полей компонентов в forminput, я был бы рад, как это сделать в этом коде.