【发布时间】:2020-01-25 03:02:27
【问题描述】:
我在父组件中有一个提交按钮。我也有几个子组件。现在,我想启用按钮以在验证通过后将表单的所有值保存在所有子组件中。 在父组件中,我创建了表单组。
public mainForm: FormGroup;
在父组件的构造函数中,
constructor(private fb: FormBuilder) {
this.mainForm = this.fb.group({
child1Form: this.fb.group({
projectName: [null, Validators.required],
projectSource: [null, Validators.required]
});
});
}
在父 html 中,我们将表单传递给子。
<div>
<app-child1 [child1Form]="mainForm.controls['child1Form']"></app-child1>
</div>
在子组件html中,代码为:
<form [formGroup]="child1Form">
<div>
<input [(ngModel)]="projectName" formControlName="projectName">
</div>
<div>
<input [(ngModel)]="projectSource" formControlName="projectSource">
</div>
</form>
在子组件的ts文件中,我们使用父组件的表单。
@Input() child1Form: any;
我要的是父组件的ngOnInit,检查表单验证。
ngOnInit() {
this.mainForm.statusChanges.subscribe(data => {
const f = this.mainForm.controls['child1Form'];
if(f.valid || f.dirth)
// do something such as enable/disable the submit button
});
}
但是我的问题是代码没有达到statusChanges 部分,即使我更改了子组件输入控件中的文本。我假设当我输入某些内容时,表单的值或状态会发生变化,因此我可以进行验证。
【问题讨论】:
-
在您的子组件上尝试
<input formControlName="projectName">和<input formControlName="projectSource"> -
@HuiZhao,你不需要订阅状态更改来启用按钮,只需在 .html `
-
@Eliseo,我有几个子表单,child1 只是演示的一个例子。
-
我的错,我忘了在演示中添加
formControlName,刚刚更新了它。我在我的真实代码中有它。 -
[enabled]="this.mainForm.valid">submit</button>整个表格
标签: angular