Ich benutze Angular 2 final Version und versuche für die asynchrone Formularvalidierung. In meinem Komponente Code unten in Konstruktor Ich habe:wie man HTTP-Aufruf innerhalb asynchronen Formvalidierungsmethode in Winkel 2 endgültig machen?
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]
});
Ich versuche, wie zu überprüfen, ob Benutzername bereits in db über http Aufruf existiert eingegeben.
Validation Methode ist wie folgt:
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);
});
}
}
der Konsole ausgegeben erhält. Aber http Anruf wird nicht gemacht. Fehler sagt
Kann jemand mir helfen zu verstehen, was ist das Problem genau?
i verwendet wie das, was Sie initially- wie mit http im Konstruktor gegeben haben und dann in statischer Methode, weil dies es. Es wird nicht erlaubt. Also stelle ich MyClass.http. Fehler waren nicht da. Aber der selbe Fehler wie 'TypeError: Kann die Eigenschaft' get 'von undefined' nicht lesen. – revathi
@revathi bevor Sie 'MyClass' verwenden, müssen Sie es' Injizable' machen und die statische Methode importieren, wo immer Sie wollen. und dann benutze es. –
ja das habe ich schon gemacht. Meine Klasse ist mit '@Injectable' gekennzeichnet, da es sich um einen Dienst handelt und dieser Dienst für die Komponente importiert wird. Auch der Service und die Komponente werden in den Deklarationen und dem Provider-Array von app.module.ts deklariert. Immer noch kein Sprung. – revathi