У меня есть угловой компонент, соответствующий форме/странице, которая генерирует неопределенное количество дочерних компонентов, каждая из которых представляет отдельное поле, и я хотел бы, чтобы FormGroup родительского компонента проверил поля, содержащиеся в дочерних компонентах. Только тогда, когда я делаю это, я получаю сообщение об ошибке:angular2 - проверка FormControlName в дочернем компоненте родительской группы FormGroup
A FormControlName must have a corresponding FormGroup.
Вот код шаблона для моего родительского компонента:
<div class="form-group" [formGroup]="parentGroup">
<table>
<tbody>
<tr *ngFor="let i of array">
<child [property]="i" [options]="myForm.controls[i.id]"></child>
</tr>
</tbody>
</table>
</div>
Форма определяется в файле компонента здесь. Я сложением FormControls согласно тому, как много дочерних компонентов мы добавляем:
private formAttrs: FormGroup;
constructor(private _fb: FormBuilder) { }
ngOnInit() {
this.myForm = this._fb.group({});
for (var i = 0; i < this.array.length; i++) {
this.formAttrs.addControl(this.array[i].id, new FormControl(this.array[i].value, Validators.required));
}
}
шаблон кода для компонента ребенка заключается в следующем:
<td class="prompt">
{{i.label}}
</td>
<td class="required" width="1%">
<span *ngIf="property.required">*</span>
</td>
<td>
<input type="text " class="form-control" [ngClass]="{error: !options.valid}" formControlName="property.id">
</td>
<td>
Хотя нет ничего определено в классе дочерних компонентов (кроме свойства «свойство» и элемента FormControl, переданного для «параметров»), я бы подумал, что formGroup в родительском компоненте сможет соответствовать с formControlName в дочернем компоненте, но вместо этого я получить ошибку:
EXCEPTION: Error in ./ChildComponent class ChildComponent - inline
template:7:109 caused by: formControlName must be used with a parent
formGroup directive. You'll want to add a formGroup directive and pass
it an existing FormGroup instance (you can create one in your class).
Есть ли способ обойти эту ошибку? Если нет, есть ли другое решение этой проблемы, которое кто-то может предложить?
Заранее спасибо.
Спасибо за ответ. Чтобы быть ясным, каждый дочерний компонент имеет свой собственный элемент «свойство» с уникальной переменной «id», поэтому formControlNames на самом деле разные. все еще выполнимо? – user2850751