让父NgForm提交所有子表单

时间:2018-01-10 21:58:22

标签: angular forms angular-reactive-forms

我在Angular 5中有一个表单,结构如下: 有许多行,每行包含有关单个实体的数据。这些行使用模板侧表单验证,并具有保存实体的提交处理程序。

所有这些行都以更大的形式包装,表示我们关心的实体集合。

现在,我希望用户能够按下一个按钮,该按钮将提交所有子窗体以便于使用。我可以从父级调用所有提交处理程序,但这不会触发模板的表单验证。有没有办法让父表单触发所有子表单的提交方式,就像用户按每行上的保存一样?

感谢。

1 个答案:

答案 0 :(得分:0)

我已经找到了部分解决方案,但我不打算将其标记为已回答,因为我觉得有/应该是更好的方法。

我在子表单中添加了模板名#taskForm="ngForm"。然后在子表单中添加了@Input() submit: boolean;@ViewChild('taskForm') taskForm: FormGroupDirective;

然后我扩展了组件以实现OnChanges并添加了以下生命周期函数

ngOnChanges() {
  if (this.submit === true) {
    this.taskForm.ngSubmit.emit();
    this.submit = false;
  }
}

父节点只是迭代ngFor子节点,并在提交父表单时将submit输入参数设置为true。这基本上可以实现我想要的,但它仍然感觉有点hacky。

编辑: 在此处可以找到以编程方式提交表单的代码:https://stackoverflow.com/a/38054632/4951118