2017-10-19 4 views
1

Je travaille sur angulaire 4 et créé un validateur personnalisé pour la validation cgpa (si le cgpa est moins tahn 2.0 ou plus grand que 4.0) dans le fichier component.ts mais ce n'est pas le déclencheur mais le Validators.required prédéfini fonctionne correctement.angulaire 4 validateur personnalisé ne fonctionne pas

ACMG Validator:

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

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

sur mesure ACMG Validator Appel

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

Code 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

Nombre (ACMG) devrait être le numéro (cgpa.value), ou plus simple: + cgpa.value. L'ajout de journaux dans le code ou l'utilisation du débogueur facilite grandement la recherche. Un validateur est sommé de renvoyer null, non indéfini, lorsqu'il n'y a pas d'erreur. –

+0

ce droit, mais il dit que le validateur n'est pas invoqué, donc la ligne est fausse, mais ce n'est pas le problème – Nickolaus

+0

Autre que cela, le code est correct. S'il n'est pas invoqué, un exemple complet est requis. Voir http://plnkr.co/edit/XxZw1icOBLUDLtHgVy7V?p=preview. Mais je suppose que l'OP * pense * qu'il n'est pas appelé parce que le message d'erreur n'apparaît pas. –

Répondre

0

Je pense que la façon dont vous inséré le validateur ne va pas, essayer quelque chose comme ça (non testé):

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}; 
    } 
    }; 
} 
0

Je préférerais faire les validations sur le code HTML directement comme suit:

<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>