Я создал Josh Moroney's tutorial при создании пользовательского валидатора. Я получил это работает, будучи в состоянии назватьПользовательские валидаторы. Передача аргумента
newForm.ts
new FormControl(question || '',
Validators.compose([AgeValidator.ageIsValid])
);
AgeValidator.ts
interface ValidationResult {
[key:string]:any;
}
export class AgeValidator {
static ageIsValid(control: AbstractControl): ValidationResult{
console.log('this is control', control)
console.log('this is control.value', control.value)
if(isNaN(control.value)){
return {
"notValid": true,
"message": "this is not a number"
};
}
if(control.value % 1 !== 0){
return {
"notValid": true,
"message": "cant be zero"
};
}
if(control.value < 18){
return {
"notValid": true,
"message": "cant be less than 18"
};
}
if(control.value > 120){
return {
"notValid": true,
"message": "Must be less than 120"
};
}
else{
return null
}
}
}
Можно ли добавить аргумент в метод .ageIsValid, чтобы я мог указать возраст, который действителен? Например,
new FormControl(question || '',
Validators.compose([AgeValidator.ageIsValid(18)])
);
То, что я пробовал:
1) Избавление от static
и использования .ageIsValid как anyother метод. Результат: Ошибка TS
2) Передача аргумента, как указано выше. Результат: Ошибка
Что-нибудь еще я могу попробовать?
Execellent! Я пошел на второй вариант. Первый дал мне кучу ошибок («Не могу найти контроль»). Второй вариант, похоже, работает для меня сейчас. Мои вопросы только в том, почему вам не нужно включать 'AgeValidator' при вызове метода? Спасибо за вашу помощь! –
Я также предпочитаю второй. Я обновил первый. Таким образом, он также должен работать, если вы используете 'this' внутри' ageIsValid() '. Я точно не знаю, что вызвало вашу ошибку. –
Другое, что мне нужно было сделать, это добавить ракету после 'ValidationResult' в ваш второй ответ. 'ValidationResult => { // использование someParam здесь }' В противном случае TS дал мне ошибку. –