如何为不需要的FormGroup定义必需的FormControl?

时间:2018-09-25 11:18:18

标签: angular typescript angular-forms

在我的应用程序中,我不需要提交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]);

在这里,我尝试说或多或少说此组是提交表单所必需的,在此组中,FirstNameLastNameIdentificationNumber是必需的。

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,这很有意义。但从本质上讲,除非它的任何控件变脏,否则我不希望将其视为进行验证。

1 个答案:

答案 0 :(得分:1)

我建议动态更新表单。使表单要求状态受到其他因素的影响。这里有一些想法:

  1. 在没有必需的验证器的情况下启动表单,并侦听表单事件“脏”或向表单添加click事件,当用户单击表单时,将表单验证器更改为“必需”。

  2. 添加单独的输入或按​​钮,用户可以单击“是的,我要填写此表单”或您喜欢的任何内容,然后如果用户决定填写该表单,则可以在表单上输入ngIf 。或者您可以使用上述外部输入来像上面一样处理所需的验证器。

  3. 如果仅在用户实际输入数据时才需要表单,请在change事件中侦听表单值。添加值后,将表单更新为必填。

无论哪种情况,您所需的表单功能都可能如下所示:

requireForm() {
    this.myForm.setValidators(Validators.required)
}

您还可以签出this post on adding validators dynamically