在我的应用程序中,我不需要提交FormGroup
,但是,如果用户尝试填写该组的任何部分,则需要在其中填写特定字段,否则该组应被视为无效。
是否可以为非必需的FormGroup
定义必填字段,以便保证数据完整性?
这是我的组
FormGroup({
officeId: new FormControl("", [Validators.required]),
fileOwner: fileOwner,
secondaryOwner: secondaryOwner,
managedByPrimary: new FormControl(true, [Validators.required])
});
这是我的FileOwner
FormGroup
,我将其标记为required
组
let fileOwner: FormGroup = new FormGroup({
FirstName: new FormControl("", [Validators.required]),
LastName: new FormControl("", [Validators.required]),
IdentificationNumber: new FormControl("", [Validators.required]),
PhoneNumber: new FormControl(""),
EmailAddress: new FormControl("")
}, [Validators.required]);
在这里,我尝试说或多或少说此组是提交表单所必需的,在此组中,FirstName
,LastName
和IdentificationNumber
是必需的。
SecondaryOwner
在此之后进行了紧密建模,因为它是具有不同验证要求的同一模型
let secondaryOwner: FormGroup = new FormGroup({
FirstName: new FormControl("", [Validators.required]),
LastName: new FormControl("", [Validators.required]),
IdentificationNumber: new FormControl("", [Validators.required]),
PhoneNumber: new FormControl(""),
EmailAddress: new FormControl("")
});
在这里,我没有将组设为必填项,但表示必须填写特定字段。我的意图是说或多或少说:“该组不是必需的,但如果您填写此字段,则这些是必不可少的,这些组才被视为有效”。
我将如何完成这种行为?现在SecondaryOwner
实例化为Invalid
,这很有意义。但从本质上讲,除非它的任何控件变脏,否则我不希望将其视为进行验证。
答案 0 :(得分:1)
我建议动态更新表单。使表单要求状态受到其他因素的影响。这里有一些想法:
在没有必需的验证器的情况下启动表单,并侦听表单事件“脏”或向表单添加click事件,当用户单击表单时,将表单验证器更改为“必需”。
添加单独的输入或按钮,用户可以单击“是的,我要填写此表单”或您喜欢的任何内容,然后如果用户决定填写该表单,则可以在表单上输入ngIf 。或者您可以使用上述外部输入来像上面一样处理所需的验证器。
如果仅在用户实际输入数据时才需要表单,请在change事件中侦听表单值。添加值后,将表单更新为必填。
无论哪种情况,您所需的表单功能都可能如下所示:
requireForm() {
this.myForm.setValidators(Validators.required)
}