1
私はAngular 2の最終版を使用しており、非同期形式の検証を試みています。私のコンポーネントでは、私は、コンストラクタ内のコードの下に持っています:角度2のファイナルで非同期フォームの検証メソッド内でhttp呼び出しを行う方法は?
this.myForm = this._formBuilder.group({
'firstName': ['', Validators.compose([Validators.required, Validators.maxLength(45), ValidationService.nameValidator])],
'userName': ['', Validators.compose([Validators.required]), Validators.composeAsync([ValidationService.userNameValidator])],
'userEmail': ['', Validators.compose([Validators.required, ValidationService.emailValidator])],
'confirmEmail': ['', Validators.required],
'password': ['', Validators.compose([Validators.required, ValidationService.passwordValidator])],
'confirmPassword': ['', Validators.required]
});
私は、ユーザー名が既に入力された場合は、HTTP呼び出しを介してDBに存在するようにチェックしようとしています。
検証方法は以下の通りである:
static userNameValidator(control: FormControl){
let http: Http;
if (control.value.trim().length === 0) {
return new Promise((resolve, reject) => {
resolve(null);
});
}
if (control.value) {
console.log('value:' + control.value);
return new Promise((resolve, reject) => {
setTimeout(() => {
var url = '/isUserNameUnique/';//this is getting printed
console.log('url is ' + url);
http.get(url + control.value + '/').map(response => response.json()).subscribe(result => {
if (result === false) {
resolve({'userAlreadyInUse': true});
} else {
resolve(null);
}
});
}, 1000);
});
}
}
コンソールが印刷なっています。しかしhttpコールは行われません。エラーが
TypeError: Cannot read property 'get' of undefined
誰かが私には問題が正確であるかを理解するのに役立つことはできますか?と言いますか
。それは許されません。だから私はMyClass.httpを置く。エラーはありませんでした。しかし、 'TypeError:プロパティを読み取れません'のようなエラーは、 'undefined'を取得します。 – revathi
@revathi 'MyClass'を使用する前に、あなたは' @Ijectable'で静的メソッドをインポートする必要があります。それを使用してください。 –
はい、私はすでにやった。私のクラスはサービスであり、このサービスはコンポーネントにインポートされているので、「@インジェクタブル」という注釈が付けられています。また、サービスとコンポーネントはapp.module.tsの宣言とプロバイダ配列で宣言されています。まだホップはありません。 – revathi