验证至少一个字段的反应表单

时间:2018-03-14 20:18:48

标签: angular angular-reactive-forms

寻找一种在角度中使用反应形式的方法,以验证2个必填字段和至少10个其他字段中的一个。因此,我们需要字段1和2,并且必须至少选择3到12中的一个。实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以将3-12放入表单组并针对表单组编写自定义验证程序。

以下是我编写的用于比较的自定义验证器的示例" email"和"确认电子邮件"表单组中的元素:

function emailMatcher(c: AbstractControl): {[key: string]: boolean} | null {
    let emailControl = c.get('email');
    let confirmControl = c.get('confirmEmail');

    if (emailControl.pristine || confirmControl.pristine) {
      return null;
    }

    if (emailControl.value === confirmControl.value) {
        return null;
    }
    return { 'match': true };
 }

然后将表格定义如下:

    this.customerForm = this.fb.group({
        firstName: ['', [Validators.required, Validators.minLength(3)]],
        lastName: ['', [Validators.required, Validators.maxLength(50)]],
        emailGroup: this.fb.group({
            email: ['', [Validators.required, Validators.pattern('[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+')]],
            confirmEmail: ['', Validators.required],
        }, {validator: emailMatcher}),
        phone: ''
    });

您可以执行类似操作,将元素3 - 12放入表单组,然后编写分配给该组的自定义验证程序。