角度4自定义验证器不工作

角度4自定义验证器不工作

问题描述:

我正在处理角度4并为component.ts文件中的cgpa验证(如果cgpa小于tahn 2.0或大于4.0)创建了一个自定义验证器,但其不触发但预定义的Validators.required工作正常。角度4自定义验证器不工作

CGPA验证:

function ValidCgpa(cgpa: FormControl): {[s: string]: boolean} { 
    let num = Number(cgpa); 

    if(num < 2.0 || num > 4.0) { 
    return {invalidCgpa: true}; 
    } 
} 

定制CGPA验证调用

this.educationalDetailsForm = new FormGroup({ 
    cgpa: new FormControl('', Validators.compose([Validators.required, ValidCgpa])) 
}); 

HTML代码

<input type="text" formControlName="cgpa" placeholder="CGPA"> 

<div *ngIf="educationalDetailsForm.hasError('ValidCgpa','cgpa') && educationalDetailsForm.get('cgpa').touched"> 
    CGPA must be greater than 2.0 and less than 4.0 
</div> 
+0

号(CGPA)应数(cgpa.value),或者更简单的:+ cgpa.value。在代码中添加日志或使用调试器可以很容易地找到。如果没有错误,验证器会返回null,而不是未定义的。 –

+0

这是正确的,但他说验证程序没有被调用,所以行是错误的,但这不是问题 – Nickolaus

+0

除此之外,代码是正确的。如果它没有被调用,那么需要一个完整的例子。请参阅http://plnkr.co/edit/XxZw1icOBLUDLtHgVy7V?p=preview。但我的猜测是OP *认为*它没有被调用,因为错误消息没有出现。 –

我想你实现验证的方式是错误的,尝试这样的事情(未经测试):

export function ValidCgpa(nameRe: RegExp): ValidatorFn { 
    return (control: AbstractControl): {[key: string]: any} => { 
    const num = Number(cgpa.value); 
    if(num < 2.0 || num > 4.0) { 
     return {invalidCgpa: true}; 
    } 
    }; 
} 

我宁愿做在HTML直接的验证如下:

<input type="number" required name="cgpa" [(ngModel)]="cgpaValue" #cgpa="ngModel"> 

<div *ngIf="cgpa.touched && (!cpga.valid || cpga.value < 2 || cpga.value > 4)"> 
    CGPA must be greater than 2.0 and less than 4.0 
</div>