2017-08-11 4 views
2

Ich habe einen benutzerdefinierten Validator für die Validierung der Pan-Kartennummer definiert (https://en.wikipedia.org/wiki/Permanent_account_number).Angular 4: Benutzerdefinierter Validator wird nicht aufgerufen

function validatePan(): ValidatorFn { 

return (c: AbstractControl) => { 
      var regpan = /^([a-zA-Z]){5}([0-9]){4}([a-zA-Z]){1}?$/; 

      if (!regpan.test(c.value)) { 
       return { 
        validatepan: { 
         valid: false 
        } 
        }; 
      } else { 
       return null; 
      } 
     } 
}   

@Directive({ 
selector: '[validatepan][ngModel], [validatepan][formControlName], [validatepan][formControl]', 
    providers: [ 
    { provide: NG_VALIDATORS, useExisting: forwardRef(() => PanValidator),  multi: true } 
    ] 
}) 
export class PanValidator implements Validator{ 
    validator: ValidatorFn; 

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

    validate(c: FormControl) { 
    console.log('here'); 
    return this.validator(c); 
    } 

} 

Ich habe die Richtlinie in den Deklarationsabschnitt des

declarations: [ 
     .... 
     PanValidator 
    ], 

Modul registriert ich die Richtlinie verwende als

<input type="text" class="form-control" name="testpan" id="field_testpan" 
      [(ngModel)]="testval.testpan" 
     validatepan /> 

folgt aber es ist weder die Richtlinie Initialisierung noch der Aufruf Funktion validieren.

Antwort

0
@Directive({ 
selector: '[validatepan][ngModel], 
    providers: [ 
    { provide: NG_VALIDATORS, useExisting: PanValidator, multi: true } 
    ] 
}) 

Versuchen Sie, den Richtungsdekorator wie oben zu ändern.

Mehr zu Validator auf den Formularen LINK

+0

Vielen Dank für Ihre Antwort. Ich habe das auch versucht. Aber das gleiche Ergebnis. –

+0

@ PrashanthRaghu können Sie Plunker erstellen, dass Link ein funktionierendes Beispiel hat, bitte befolgen Sie das könnte helfen –

+0

Jeder Fehler, den Sie bekommen –

2

ich in der Lage war, das Problem herauszufinden. Als ich den Validator dem Exportbereich hinzugefügt habe, funktionierte die Funktionalität nahtlos.

exports: [ 
    .... 
    PanValidator 
], 
+0

Ich bin verwirrt, warum das funktioniert. Ich habe eine AppModule- und MyModule-Struktur. Die einfache Deklaration über AppModule funktioniert nicht. Ich musste in meinem Kindmodul deklarieren. Das ist sehr seltsam. –

Verwandte Themen