Angular 7 Forms - 有条件地需要 FormGroup

标签 angular forms typescript angular7 angular-forms

我正在构建一个表单,用户可以在其中设置付款选项。有一个下拉菜单可以选择使用哪种付款方式。 对于每种付款方式,都有一个 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

关于Angular 7 Forms - 有条件地需要 FormGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54036613/

相关文章:

Angular2 如何在用户交互时滚动到窗口顶部

javascript - Angular HttpModule 如何处理从远程 API 接收到的不适当数据

angular - 将值传递给组件时是否存在可选的 input() 条件?

javascript - JQuery 和 Ajax : Is the <form> element important, 或者我可以只使用 &lt;input&gt;

angularjs - 更改范围变量中的值后, Angular 表单验证无效

javascript - 如果用户选择这样做,如何制作一个 POST 并在新窗口中打开的链接?

css - @media 规则在屏幕变大时不会关闭

typescript - angular2 CLI 项目中缺少一些 RxJS 运算符?该怎么办?

javascript - 将通用 JS 函数导入 Angular 模块

angular - 将外部库与 Angular cli 一起使用