2016-07-25 40 views
0

に追加のパラメータを与える私は値がすでに使用されているかどうかを確認するためにAngular2フォーム検証と杖を試しています:は、カスタム検証

namesArray = Users[]; 
ngOnInit() { 
this.myForm = this.fb.group({ 
     name: ['', Validators.compose([ 
     Validators.required, 
     this.nameValidator 
     ]) 
     ], 
}) 
} 

nameValidator(control:FormControl):{[key:string]:boolean} { 
    console.log(this.namesArray); 
    return null; 
} 

これは私にエラーを返します:

は 'プロパティを読み取ることができません。名前配列が未定義

thisを印刷すると、定義されていません。では、関数の外にある配列にはどうすればアクセスできますか?

+0

あなたは 'this.nameValidator.bind(この)'のようなコンテキストを保持しようとしたことがありますか? – yurzui

答えて

4

あなたはここで脂肪の矢印についてthis

ngOnInit() { 
this.myForm = this.fb.group({ 
     name: ['', Validators.compose([ 
     Validators.required, 
     (control) => this.nameValidator(control as FormControl) 
     ]) 
     ], 
}) 
} 

詳細を保持するために、脂肪の矢印機能に渡す必要があります。https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html

+0

'' AbstractControl '型の引数が' FormControl'型のパラメータに代入不可能です – mimo

+0

ちょっと編集しました。太矢印を使用するときは 'FormControl'にキャストするか、' AbstractControl'パラメータを許可するように検証関数のシグネチャを変更します。 –