1
我在關注創建自定義驗證器後跟着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像任何其它方法。結果:TS錯誤
2)傳遞類似上面的參數。結果:錯誤
其他我可以嘗試嗎?
Execellent!我去了第二個選擇。第一次給了我一堆錯誤('找不到控制')。第二種選擇現在似乎適用於我。我唯一的問題是,爲什麼在調用方法時不需要包含'AgeValidator'?感謝你的幫助! –
我也比較喜歡2nd。我更新了第一個。這樣,如果你在'ageIsValid()'裏面使用'this',它也應該可以工作。我不知道究竟是什麼導致了你的錯誤。 –
我需要做的另一件事是在第二個答案中的「ValidationResult」後添加一個火箭。 'ValidationResult => { //在這裏使用someParam }'否則TS給了我一個錯誤。 –