2017-08-27 1 views
0

J'ai créé la directive pour valider la valeur d'entrée. J'ai besoin de cela en entrée certains caractères ma entrée/formulaire deviennent ivalid. Voici mon code, mais cela ne fonctionne pas.Directive pour la validation de la valeur d'entrée

import {Directive, Input} from '@angular/core'; 
 
import {AbstractControl, NG_VALIDATORS, ValidationErrors} from '@angular/forms'; 
 

 
const regExp = new RegExp('(>|<)+'); 
 

 
@Directive({ 
 
    selector: '[validator]', 
 
    providers: [{ 
 
     provide: NG_VALIDATORS, 
 
     useExisting: ValidatorDirective, 
 
     multi: true 
 
    }] 
 
}) 
 

 
export class ValidatorDirective { 
 
    @Input('validator') input; 
 

 
    constructor() { 
 

 
    } 
 

 
    validate (control: AbstractControl): ValidationErrors { 
 
     const value = control.value; 
 
     const isValid = regExp.test(value); 
 

 
     return isValid ? null : { 
 
      validator: { 
 
       valid: false 
 
      } 
 
     }; 
 
    } 
 
}

Merci pour votre aide. Passez une bonne journée.

+0

Qu'est-ce qui ne fonctionne pas? Qu'attendez-vous qu'il se passe? Qu'est-ce qui se passe réellement? Comment utilisez-vous cette classe que vous avez créée? Veuillez créer une démo en ligne sur StackBlitz ou Plunker. –

+1

pourquoi utilisez-vous une entrée il suffit d'utiliser '[validateur] [ngModel]' obtenir la valeur de 'AbstractControl' –

+0

Il doit valider l'entrée et lorsque l'entrée est {ou} le formulaire doit jeter une erreur à essayer de sauver. – SashaSemanyuk

Répondre

1

L'utilisation [validator][ngModel] fera l'affaire dans votre cas que vous n'avez pas besoin d'avoir une entrée pour cette directive

Vous aimez cette

import {AbstractControl, ValidatorFn, Validator, FormControl, NG_VALIDATORS} from "@angular/forms"; 
import {Directive} from '@angular/core'; 


const regExp = new RegExp('(>|<)+'); 
function validateregex(): ValidatorFn { 
    return (c : AbstractControl) => { 

    const isValid = regExp.test(c.value); 
    console.log("Valid"+isValid); 
    //let isValid = c.value === 'Rahul'; 
    if(isValid){ 
     return null; 
    }else{ 
     return { 
     validator: { 
      valid: false 
     } 
     }; 
    } 

    } 
} 

@Directive({ 
    selector: '[regex][ngModel]', 
    providers: [{ 
    provide: NG_VALIDATORS, useExisting: ValidatorDirective, multi: true 
    }] 
}) 

export class ValidatorDirective implements Validator{ 

    validator: ValidatorFn; 

    constructor() { 
    this.validator = validateregex(); 
    } 

    validate(c: FormControl) { 
    return this.validator(c); 
    } 

} 

Ajouter cette directive à un tableau declarations de NgmoduleValidatorDirective,

L'exemple de travail de la même link.

+0

Merci de votre réponse. Mais ça ne marche pas aussi bien. Dans l'Angular 1.5, j'ai utilisé 'ctrl. $ SetValidity' et' ctrl. $ Parsers' pour cela. Mais ici, je ne sais pas comment configurer cette fonctionnalité – SashaSemanyuk

+0

@SashaSemanyuk j'ai mis à jour la réponse aux changements et il fonctionne pour moi je l'ai testé la même chose. –

+0

il me renvoie l'objet de la directive avec 'valid: false'. Mais je peux toujours soumettre le formulaire. Que peut-il être? – SashaSemanyuk