2

我动态地将带有表单控件的组件(使用@ViewChild 和insert())注入到一个用表单标签包装它的组件中(这样我就可以拥有许多具有相同表单处理的不同表单模板)。

这一切都很好,但是现在当我检查 form.valid 时,它总是有效的,因为显然,它看不到动态注入的表单控件。

我能否以某种方式触发表单上 ngForm 指令的“重新初始化”,以便它知道注入了其他表单控件?

注意:我现在确实意识到这个问题的更好解决方案可能是使用模型驱动的表单,但是现在重做整个事情的时间太短了。

父模板:

<form #htmlFormElement="ngForm" novalidate>
    <div #dynamicComponentContainer></div>
    <!-- more buttons and shared form controls here -->
</form>

子模板 例如

<textarea name="comments" [(ngModel)]="formData.comments"></textarea>
4

1 回答 1

1

您可以在子组件中设置 viewProviders 以使用现有的 NgForm 作为 ControlContainer。

这应该自动将子组件中的表单控件视为父组件表单的一部分。

例如:

@Component({
    selector: 'child-with-form-controls',
    templateUrl: './child-with-form-controls.component.html',
    viewProviders: [{ provide: ControlContainer, useExisting: NgForm}]
})
export class ChildWithFormControlsComponent {
    ...
}
于 2019-05-26T08:23:03.690 回答