2016-08-18 11 views
1

Ich habe ein Passwort Formcontrol mit mehreren benutzerdefinierten Validierer (unten nur eins):Winkel 2 refactor benutzerdefinierte Validierungslogik in Service

password = new FormControl('', 
    [Validators.required, Validators.minLength(8), 
    this.passwordHasLowerCaseValidator.bind(this)]); 

passwordHasLowerCaseValidator(control: FormControl) { 
    return (...); 
} 

und ich möchte etwas die benutzerdefinierten Validierer von einem Service, um meine Anmeldungen Refactoring nennen Komponente wie

constructor(private customValidators:CustomValidators){} 

password = new FormControl('', 
    [Validators.required, Validators.minLength(8), 
    this.customValidators.passwordHasLowerCaseValidator.bind(this)]); 

ich habe das versucht, und es warf Fehler, ich die Form erraten entweder konnte sie nicht die Daten nicht an sie ..

Dank zugreifen oder könnte passieren!

+0

Einfach etwas mehr Code posten. Ist Ihr Service '@Injectable()'? – mxii

+0

"warf Fehler" ist alles andere als hilfreich. Bitte posten Sie die genaue Fehlermeldung. –

Antwort

1

Wenn Sie Ihren Validator ändern, um eine Prüffunktion wie

passwordHasLowerCaseValidator(customValidators: CustomValidators) { 
    return (control: FormControl) => { 
    return (...); 
    // here you can access "customValidators" 
    } 
} 

und verwenden Sie es wie

constructor(private customValidators:CustomValidators){} 

password = new FormControl('', 
    [Validators.required, Validators.minLength(8), 
    this.customValidators.passwordHasLowerCaseValidator(customValidators).bind(this)]); 

Sie das gewünschte Verhalten bekommen zurückkehren sollte.

+0

Dank Günther Ihr Code funktioniert gut, nur sollte es passwordHasLowerCaseValidator (customValidators: Formcontrol) sein {...} und der Anruf ist this.customValidators.passwordHasLowerCaseValidator (this.password) .bind (this) –

+0

ich nicht denke schon. Die Funktion heißt 'this.customValidators.passwordHasLowerCaseValidator (customValidators)', wobei 'customValidators' vom Typ' CustomValidators' ist. Die zurückgegebene Funktion, die tatsächlich als Validierer übergeben wird, hat den von Validatoren benötigten Parameter 'control: FormControl'. Ich habe vielleicht etwas aus Ihrer Frage falsch interpretiert, aber wenn es wie gewünscht funktioniert, nehme ich an, dass meine Annahmen richtig waren ;-) –

+0

wo befindet sich CustomValidators? Ich sollte darauf hinweisen, dass ich RC4 (aktuelle angulare Version in ionic 2 beta11) verwende der Code in meinem vorherigen Kommentar funktioniert gut, aber ... nicht sicher, ob es testbar sein wird ... –