Ich habe Josh Moroney's tutorial beim Erstellen eines benutzerdefinierten Validators gefolgt. Ich habe es funktioniert, in der Lage zu seinBenutzerdefinierte Validatoren - ein Argument übergeben
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
}
}
}
Ist es zu nennen möglich, ein Argument in .ageIsValid Methode hinzuzufügen, so dass ich das gültige Alter angeben kann? Zum Beispiel
new FormControl(question || '',
Validators.compose([AgeValidator.ageIsValid(18)])
);
Was habe ich versucht:
1) von static
Loswerden und wie anyother Methode .ageIsValid. Ergebnis: TS-Fehler
2) Übergeben eines Arguments wie oben. Ergebnis: Fehler
Alles andere, was ich versuchen kann?
Execellent zurück! Ich ging für die zweite Option. Der erste gab mir eine Reihe von Fehlern ('Kann die Kontrolle nicht finden '). Die zweite Option scheint jetzt für mich zu funktionieren. Meine einzige Frage ist, warum brauchst du "AgeValidator" nicht beim Aufruf der Methode? Danke für deine Hilfe! –
Ich bevorzuge auch die 2nd. Ich habe das erste aktualisiert. So sollte es auch funktionieren, wenn Sie 'this' in' ageIsValid() 'verwenden. Ich weiß nicht genau, was Ihren Fehler verursacht hat. –
Die andere Sache, die ich tun musste, war, nach 'ValidationResult' in Ihrer zweiten Antwort eine Rakete hinzuzufügen. 'ValidationResult => { // benutze hier einigeParam }' Sonst gab TS mir einen Fehler. –