это работает, это была ошибка где-то еще. Создать собственный валидатор

Я настраиваю свою форму и создаю собственный валидатор. Но делаю не так, потому что всегда вылетает:

**my-component.ts**
export function ageRangeValidator(min: number, max: number): ValidatorFn {
  return (control: AbstractControl): { [key: string]: boolean } | null => {
     if (control.value !== undefined && (isNaN(control.value) || control.value < min || control.value > max)) {
      return { 'ageRange': true };
     }
   return null;
 };
}

@Component({
  selector: 'my-component',
  templateUrl: './my-component.html',
  styleUrls: ['./my-component.scss'] 
})

export class MyComponent implements OnInit {

  form: FormGroup;

  constructor(private fb: FormBuilder) {
  }

  ngOnInit() {
    this.form = this.fb.group({
       name: ['', [Validators.required],
       age: ['', [Validators.required, ageRangeValidator(20, 30)]]

  }
}

При создании формы происходит сбой

Error: formGroup expects a FormGroup instance. Please pass one in.

   Example:


<div [formGroup]="myGroup">
  <input formControlName="firstName">
</div>

In your class:

this.myGroup = new FormGroup({
   fistName: new FormControl()
});

если я удалю валидатор в определении формы, он сработает.

Что я делаю не так?

2 ответа

// in your form 
age   : ['', [Validators.required, this.ageRangeValidator, Validators.maxLength(100)]],
// function in same class
  public ageRangeValidator(control: FormControl) { 
    const isValid = control.value > 30  && control.value < 30;
    return isValid ? null : { ageRange: true };
  }

Ваш возраст - это строка, в вашем валидаторе вы сравниваете числа. Убедитесь, что вы используете правильный тип. Почему вы не используете числовые поля ввода и валидаторы max+min?

Другие вопросы по тегам