2016-08-06 47 views
0

Ich versuche ein modalgesteuertes Formular mit benutzerdefinierter Validierung zu erstellen. Ich möchte bestätigen, dass das Passwort der Benutzer die Anforderungen (Großbuchstaben, Kleinbuchstaben und Nummer) beantworten. Das Problem ist, dass ich die Regex nicht speziell in der Methode schreiben möchte, ich möchte einen unumgänglichen Dienst haben, der alle meine Regex konzentrieren. Ich konnte den Dienst der Komponentenklasse injizieren, konnte aber in keiner Weise auf die Dienstinstanz innerhalb der Validetor-Methode zugreifen.Zugriff auf Klassenvariablen aus der Formvalidatormethode in angular 2

Jeder hat eine Idee, wie kann ich auf den Service zugreifen?

Danke.

Dies ist mein Code:

export class SignUpComponent implements OnInit { 
regexService:RegexService 
    builder: FormBuilder 
    signUpForm: FormGroup; 
    email: FormControl; 
    password: FormControl; 
    passwordAgain: FormControl; 


    matchedPassword (input: any) { 
    if(!input.root || !input.root.controls) 
    return null; 

    if(input.root.controls.password.value===input.root.controls.passwordAgain.value) 
     return null; 
    else 
     return { mismatchedPassword: true }; 
    } 

    passwordAnswerRequirements(input: any){ 
    if(!input.root || !input.root.controls) 
    return null; 

    if(this.regexService.getRegex('password').test(input.value)) 
     return null; 
     else 
     return {notAcceptablePassword:true} 
    } 



    constructor(builder: FormBuilder,regexService:RegexService) { 
    this.builder=builder; 
    this.regexService=regexService; 
    } 

    ngOnInit(){ 
    this.email = new FormControl('', [ 
     Validators.required, 
    ]); 
    this.password = new FormControl('', [ 
     Validators.required, 
     this.matchedPassword, 
     this.passwordAnswerRequirements 
    ]); 
    this.passwordAgain=new FormControl('',[ 
     Validators.required, 
     this.matchedPassword, 
     this.passwordAnswerRequirements 
    ]); 
    this.signUpForm = this.builder.group({ 
     email: this.email, 
     password: this.password, 
     passwordAgain:this.passwordAgain 
    }); 
    } 

Mein Service-Name ist 'RegexService' und der validetor Funktionsname ist 'passwordAnswerRequirements'

+0

Code fehlt das Stichwort 'CLASS' – AngJobs

+0

hatte ich is..Just tat es hier kopieren ... Ive meine Frage bearbeitet –

Antwort

0

ich endlich eine Lösung gefunden .. es ist nicht die ästhetische, aber ich t funktioniert ... Ich füge eine Wrap-Funktion um die Methode 'passwordAnswerRequirements' hinzu und von dort konnte ich die Dienstinstanz in eine lokale Variable einfügen.

passwordAnswerRequirements() { 
    let passwordRegexExp = this.regexService.getRegex('password'); 
    return (input: any) => { 
     if (!input.root || !input.root.controls) 
     return null; 
     if (passwordRegexExp.test(input.value)) 
     return null; 
     else 
     return { notAcceptablePassword: true } 
    }; 
    } 
0

Sie brauchen nicht Ihren Service Variable zu deklarieren, ist es bereits in der Konstruktor und Sie können es als this.regexService in Ihrer Klasse verwenden, so

export class SignUpComponent implements OnInit { 
//regexService:RegexService -- remove this line 
    builder: FormBuilder 
    signUpForm: FormGroup; 
    email: FormControl; 
    password: FormControl; 
    passwordAgain: FormControl; 



    constructor(builder: FormBuilder,private regexService:RegexService) { 
    this.builder=builder; 
    // this.regexService=regexService; -- you don't need this line 
    } 
.... 
+0

Wenn ich diese Zeilen entferne ich Flusen Fehler erhalten, dass regexService nicht definiert ist. . –