多次致电自定义表单验证器

时间:2019-09-25 16:38:46

标签: angular forms validation

我正在使用自定义验证程序来检查2个输入的值是否匹配:

import { FormGroup } from '@angular/forms';

// custom validator to check that two fields match
export function MustMatch(controlName: string, matchingControlName: string) {
    return (formGroup: FormGroup) => {
        const control = formGroup.controls[controlName];
        const matchingControl = formGroup.controls[matchingControlName];

        if (matchingControl.errors && !matchingControl.errors.mustMatch) {
            // return if another validator has already found an error on the matchingControl
            return;
        }

        // set error on matchingControl if validation fails
        if (control.value !== matchingControl.value) {
            matchingControl.setErrors({ mustMatch: true });
        } else {
            matchingControl.setErrors(null);
        }
    }
}

这适用于匹配一对输入,如下所示:

ngOnInit() {
        this.applicationForm = this.formBuilder.group({
            firstName: ['', Validators.required],
            password: ['', [Validators.required, Validators.minLength(6)]],
            confirmPassword: ['', Validators.required],
            acceptTerms: [false, Validators.requiredTrue]
        }, {
            validator: MustMatch('password', 'confirmPassword')
        });
    }

但是我不知道如何再次启用另一个对,例如电子邮件和确认电子邮件。

validator: MustMatch('password', 'confirmPassword'), validator2: MustMatch('email', 'confirmEmail')

没有错误,但不执行任何操作,验证仍然适用于密码,但不适用于电子邮件。您不能具有相同名称的多个属性,因此我尝试使用“ validator2”。

我不能叫一个全新的人

{
   validator: MustMatch('password', 'confirmPassword')
}

在this.formBuilder.group({})中,因为它仅接受2个参数。

1 个答案:

答案 0 :(得分:2)

doc中,您必须这样做

validators: [
               MustMatch('password', 'confirmPassword'),
               MustMatch('email', 'confirmEmail')
            ]