валидатор группы не влияет на form.isValid - PullRequest
0 голосов
/ 01 июня 2018

Мне кажется, что когда я создаю группу форм в angular 5 , вот так:

this.myForm = formBuilder.group({
      control1: [null, [Validators.required, Validators.minLength(3)]],
      control2: [null, [Validators.required, Validators.minLength(3)]]
    },
    {
       validator: comparisonValidator(
         'control1'
         'control2',
          this.formGroup)
    });

установленный мною валидатор группы, в данном случае с именем CompareControls, делаетне применяется к форме при проверке form.isValid (кажется, что учитываются только отдельные валидаторы элементов управления).

Любые мысли о том, как повлиять на групповой валидатор (сравнение Валидатор)Форма. Допустим, например, валидность формы в целом?

export function comparisonValidator(control1: string, control2: string, group: FormGroup): ValidatorFn { 
    return (c: AbstractControl): ValidationErrors | null => {
        if (group && group.controls) {
            const f1 = <AbstractControl>group.get(control1);
            const f2 = <AbstractControl>group.get(control2);

            if (f1.value >= f2.value) {
                return {'case': 'From should be less than To'};
            }
        }
        return null;
    };
}

1 Ответ

0 голосов
/ 02 июня 2018

если вы хотите, чтобы действительный по formGroup (я рекомендую использовать ответ @ LuaXD's) https://stackoverflow.com/a/50652053/7291379]

Если вы хотите, чтобы действительный по formControl, вы можете получить другой FormControl из formControl.Parent

export function comparisonValidator(control1: string, control2: string): ValidatorFn { 
    return (c: AbstractControl): ValidationErrors | null => {
        const group = c.parent;        
        if (group && group.controls) {
            const f1 = <AbstractControl>group.get(control1);
            const f2 = <AbstractControl>group.get(control2);

            if (f1.value >= f2.value) {
                return {'case': 'From should be less than To'};
            }
        }
        return null;
    };
}
const myComparisonValidator = comparisonValidator('control1'
         'control2');
this.myForm = formBuilder.group({
      control1: [null, [
        Validators.required, 
        Validators.minLength(3),
        myComparisonValidator
        ]
      ],
      control2: [
        null, [
          Validators.required, 
          Validators.minLength(3),
          myComparisonValidator
         ]
       ]
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...