Директива Angular validator — метод проверки никогда не вызывается

#angular #validation #angular-validation

#angular #проверка #angular-проверка

Вопрос:

У меня есть следующая директива проверки:

 import { Directive, Input } from '@angular/core';
import { Validator, ValidationErrors, AbstractControl, NG_VALIDATORS } from '@angular/forms';
import { isNumber } from 'util';

@Directive({
    selector: '[minMaxValidator]',
    providers: [{
        provide: NG_VALIDATORS,
        useExisting: MinMaxValidatorDirective,
        multi: true
    }]    
})

export class MinMaxValidatorDirective implements Validator {

    @Input() public minValue: number = null;
    @Input() public maxValue: number = null;

    constructor() { }

    validate(c: AbstractControl): ValidationErrors {
        let result: ValidationErrors = null;

        if (isNumber(c.value)) {
            if (this.minValue !== null amp;amp; this.minValue > c.value) {
                result = { message: 'Value must be greater than '   this.minValue };
            }

            if (this.maxValue !== null amp;amp; this.maxValue < c.value) {
                result = { message: 'Value must be lower than '   this.maxValue };
            }
        }

        return resu<
    }
}
  

И я использую его следующим образом:

 <input type="text" min-max-validator minValue="0" maxValue="1" [(ngModel)]="data.compression" />
  

Входные данные отображаются, но метод validate в validator никогда не вызывается. У меня нет ошибок в консоли, и валидатор зарегистрирован в app.module.ts

Чего мне не хватает?

Комментарии:

1. Разве это не должен быть minMaxValidator в вашем теге ввода?

2. просто измените свой селектор minMaxValidator

Ответ №1:

Вы должны использовать minMaxValidator (селектор для вашей директивы) в вашем поле ввода.

 <input type="text" minMaxValidator minValue="0" maxValue="1" [(ngModel)]="data.compression" />