2016-08-06 18 views
0

私はカスタム検証でモーダル駆動型を作成しようとしています。 私は、ユーザーが挿入したパスワードが要件に答えることを検証したいと考えています(大文字の後ろ、小文字の後者および数字)。 問題は、私は正規表現を特にそのメソッドに書いたくないということです。私はすべての正規表現を集中させることができます。 コンポーネントクラスにサービスを注入できましたが、validetorメソッド内でサービスインスタンスにアクセスすることはできませんでした。角度2のフォームバリデーターメソッドからのクラス変数へのアクセス

どのように私はサービスにアクセスできますか?

ありがとうございました。

これは私のコードです:

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

私のサービス名は「RegexService」とvalidetor関数名であるが、「passwordAnswerRequirements」

+0

あなたのコードは、キーワード 'class' – AngJobs

+0

が不足している私はここにコピーdidntはis..Justを持っていた私はregexServiceが定義されていないことを糸くずのエラーを取得し、それらの行を削除すると...アイブ氏は私の質問 –

答えて

0

は、私は最終的に解決策を見つけた...それは最も審美的なものではないのですが、私t works ... 'passwordAnswerRequirements'メソッドの周りに折り返し機能を追加し、そこからサービスインスタンスを取得してローカル変数に入れることができました。

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

であるあなたは、あなたのサービス変数を宣言する必要はありません、それはすでにですコンストラクタは、あなたのクラスの内部this.regexServiceとして使用することができますので、

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

を編集しました。 。 –

関連する問題