Можно ли передавать динамические значения в специальный валидатор форм в Angular 6?
В основном, у меня есть некоторые входные данные формы, проверки которых зависят друг от друга (то есть, если вы вводите временной интервал, время "от" должно быть меньше времени "до"), но я не совсем уверен, как иди об этом.
Вот моя форма группы:
this.form = this.fb.group({
fromTime: ["", [Validators.required, CustomValidator.myValidationFunction(this.form.get("toTime").value)]],
toTime: ["", [Validators.required]]
});
И вот мой валидатор до сих пор:
static myValidationFunction(testing) {
const toTime = testing; // only comes here 1 time
return control => {
return toTime /*this value never changes*/ ? null : { test: {} };
};
}
но кажется, что ценность x
или же toTime
устанавливается только в первый раз, когда создается валидатор. Есть ли способ передать динамические входы в пользовательский валидатор?
Я довольно плохо знаком с angular, но прочитал документы по проверке пользовательских форм, но не могу найти свой ответ
1 ответ
Решение
static TimeValidator(formGroup) {
const fromTime = formGroup.controls.fromTime;
const toTime = formGroup.controls.toTime;
if (fromTime.value && toTime.value) {
if (toTime.value <= fromTime.value) {
return {time: true};
}
}
return null;
}
ngOnInit(): void {
this.form = new FormGroup({
fromTime: new FormControl('', Validators.required),
toTime: new FormControl('', Validators.required)
}, AppComponent.TimeValidator);
this.form.controls.fromTime.setValue(2);
this.form.controls.toTime.setValue(1);
}
и в HTML вы можете проверить по:
{{form.hasError('time')}}
Не стесняйтесь спрашивать, если у вас есть вопросы.