我正在动态地注入一个组件(使用@viewchild and insert())形式控件中的组件将其包裹在形式标签中(以便我可以拥有许多不同的形式模板,并具有相同的形式处理)。
这一切都很好,但是现在,当我检查表单时。valid始终有效,因为显然,它看不到动态注射的表单控件。
我可以以某种方式触发ngform指令的在表单上的,以便它知道注入其他表单控件吗?
注意:我现在确实意识到,解决此问题的更好解决方案可能是使用模型驱动的表单,但是现在太短了,无法重做整个过程。
父模板:
<form #htmlFormElement="ngForm" novalidate>
<div #dynamicComponentContainer></div>
<!-- more buttons and shared form controls here -->
</form>
儿童模板例如。:
<textarea name="comments" [(ngModel)]="formData.comments"></textarea>
您可以在子组件中设置ViewProviders将现有NGFORM用作ControlContainer。
这应该自动处理子组件中的形式控制,就像它们是父部件的一部分一样。
例如:
@Component({
selector: 'child-with-form-controls',
templateUrl: './child-with-form-controls.component.html',
viewProviders: [{ provide: ControlContainer, useExisting: NgForm}]
})
export class ChildWithFormControlsComponent {
...
}