По умолчанию поля ввода numner не проверяются, если число, введенное пользователем вручную, делится на счетчик шагов. Если вам нужна такая функция, вам нужно реализовать собственный валидатор, который довольно прост.
Все, что вам нужно сделать, - это создать функцию для проверки поля ввода чисел, а затем включить вновь созданный валидатор в массив Validators объекта FormControl
. Ваша функция валидатора должна либо возвращать значение null
при прохождении пользовательского проверочного теста, либо возвращать карту пар ключ-значение с подробным описанием причины сбоя.
Найдите приведенный ниже фрагмент кода, демонстрирующий использование настраиваемого валидатора для проверьте, является ли текущее значение ввода допустимым шагом или нет.
export class AppComponent implements OnInit {
steps = 0.25;
myForm: FormGroup;
constructor(private fb: FormBuilder) {}
ngOnInit() {
this.myForm = this.fb.group({
numberControl: new FormControl(null, [
Validators.required,
this.validateNumField.bind(this)
])
});
this.myForm.valueChanges.subscribe(_ => {
if (!this.myForm.valid) {
console.log('err msg -> ', this.myForm.get("numberControl").errors);
}
});
}
validateNumField(control: AbstractControl): { [key: string]: any } {
let rem = control.value && Number.parseFloat(control.value) % this.steps;
// console.log(rem);
/**
* If the remainder is not 0 then user has entered an invalid value
*/
return rem ? { error: "Not a valid step" } : null;
}
}
Теперь ваша кнопка отправки не будет работать, если она не является допустимым шагом. Вы можете go вперед и показать сообщение об ошибке в шаблоне, если хотите использовать свойство this.myForm.get("numberControl").errors
.
Рабочий пример можно найти в stackblitz здесь . Для получения дополнительной информации о пользовательской проверке посетите Angular документы .
Редактировать: Обновленный ответ для захвата изменения в шагах.