В моем проекте Angular 6 есть форма Form Builder, и у меня возникает проблема с валидаторами.
Я думаю, что знаю, в чем проблема, но не знаю, как ее исправить,У меня есть собственный валидатор (не совсем пользовательский, я использую min () и max () с пользовательской переменной для проверки)
И, вероятно, форма инициализируется перед этими значениями.
Форма объявлена перед конструктором (я пытался переместить ее в конструкцию и в ngOnInit, тот же результат)
myForm = this.fb.group({
title: [""],
date: [""],
max_score: [, [Validators.required, Validators.max(6), Validators.min(1)]],
min_score: [, [Validators.required, Validators.max(6), Validators.min(1)]]
});
constructor(private fb: FormBuilder) {}
Так все работает, даже валидаторы.max_score
и min_score
- это 2 выпадающих списка, в которых вы можете выбрать число.
Я хочу достичь следующего:
max_score: [, [Validators.required, Validators.max(6), Validators.min(this.myForm.get("min_points").value)]],
min_score: [, [Validators.required, Validators.max(this.myForm.get("max_score").value), Validators.min(1)]]
Так что в принципе max_score
не может бытьниже, чем min_score
, и min_score
не может быть выше, чем max_score
!
Но это дает мне ошибку:
TypeError: Cannot read property 'get' of undefined
Так что я думаю, это потому, что this.myForm.get("max_score").value
недоступен при инициализации Form Builder.
Как я могу решить эту проблему?Эти значения не являются обязательными в моей форме, поэтому правильно, что они не имеют значения в начале, и я просто хочу поставить проверку, которая позволяет избежать выбора min_value, которое больше, чем max_value
Iдаже пытался поместить this.myForm.get .... в функцию:
getMaxPoints(): number {
if (this.myForm.get("max_score").value) {
return this.myForm.get("max_score").value;
} else return null;
}
, а затем
min_score: [, [Validators.required, Validators.max(this.getMaxPoints()), Validators.min(1)]]
но я получаю ту же ошибку!
Как обойти эту проблему?