将参数传递给添加到FormGroup的自定义验证器

时间:2018-03-12 02:19:50

标签: angular angular2-formbuilder

我正在尝试向FormGroup添加自定义验证器,因此我可以比较表单内的多个输入字段。如果我在验证器中硬编码输入字段的名称,它可以工作,但我还没有找到将这些名称作为参数传递的方法。

这可能吗?

//验证器

export function TestValidator (controlName: string, secondControlName: string, thirdControlName: string) {

    return (form: FormGroup) => {
        // OK
        console.log(form);

        // OK
        console.log(controlName);

        // undefined
        console.log(secondControlName);
        console.log(thirdControlName);
        ...
    }
}

//表单服务

...
this.form = this.formBuilderService.group({...}, {validator: testValidator('name1', 'name2', 'name3')});

我看到的所有将验证器添加到fromGroup的示例都不使用参数。

1 个答案:

答案 0 :(得分:0)

我的自定义验证码可能有助于解决您的问题

export function matchOtherValidator(otherControlName: string) {

let thisControl: FormControl;
let otherControl: FormControl;

return function matchOtherValidate(control: FormControl) {

    if (!control.parent) {
        return null;
    }

    // Initializing the validator.
    if (!thisControl) {
        thisControl = control;


   otherControl = control.parent.get(otherControlName) as FormControl;
        if (!otherControl) {
            throw new Error('matchOtherValidator(): other control is not 
   found in parent group');
        }
        otherControl.valueChanges.subscribe(() => {
            thisControl.updateValueAndValidity();
        });
    }

    if (!otherControl) {
        return null;
    }

    if (otherControl.value > thisControl.value) {
        return {
            dateError: true
        };
    }

    return null;

}

在这里你可以看到我如何通过传递另一个控件名来获得其他控件  检查哪一个更大,您可以在验证中使用相同的技术  功能