Angular 7 个表单 - 有条件地需要 FormGroup

Angular 7 Forms - Conditionally require FormGroup

我正在构建一个表单,用户可以在其中设置付款选项。有一个下拉菜单可以选择使用哪种付款方式。 对于每种付款方式,都有一个 FormGroup,其中包含所选方法的选项:

form: FormGroup = new FormGroup({
        method: new FormControl('paypal', {
            validators: [
                Validators.required,
            ],
        }),
        paypal: new FormGroup({
            email: new FormControl(null, {
                validators: [
                    Validators.required,
                    Validators.pattern(EMAIL_PATTERN)
                ],
            }),
        }),
        other: new FormGroup({
            email: new FormControl(null, {
                validators: [
                    Validators.required,
                    Validators.pattern(EMAIL_PATTERN)
                ],
            }),
        }),
    });

这里的问题是,只有 FormGroups 都有效时,表格才有效。

但是一旦所选付款方式的 FormGroup 有效,表格就应该有效。

我建议编写自定义根级别 FromGroup 验证器。您基本上有一个定制的验证要求,它需要一个定制的验证器。

验证器可以在整个 FormGroups 和个人 FormControls 上工作,因为它们都 AbstractControls 在幕后。

This should point you in the right direction

编辑:对于任何寻求快速答案的人,这里有一个 stackblitz:nested form validation

为什么不禁用不需要的控件 - 那么它们就得不到验证?