我正在尝试创建一个自定义的Angular 2表单验证器
,以检查用户是否存在于数据库中。
这是我的自定义表单验证器
的代码:
import { FormControl } from '@angular/forms';
import {API} from "../services/api";
import {ReflectiveInjector} from "@angular/core";
export class EmailValidator {
constructor() {}
static checkEmail(control: FormControl,): any {
let injector = ReflectiveInjector.resolveAndCreate([API]);
let api = injector.get(API);
return api.checkUser(control.value).then(response => {
response;
});
}
}
这是我的自定义服务,负责向后端的节点API发出请求。
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class API {
private backendUrl = 'http://127.0.0.1:5000/api/register/';
constructor(private http: Http) { }
checkUser(email:string): Promise<any> {
return this.http.get(this.backendUrl + email)
.toPromise()
.then(response => response.json())
.catch(this.handleError);
}
当我尝试验证用户时,会显示以下错误。EXCEPTION: Error in ./TextInput class TextInput - inline template:0:0 caused by: No provider for Http! (API -> Http)
我做错了什么?
谢谢
formBuilder.group
。 - Hanzoreturn { error: '用户已存在' };
或者其他你想要在出错时获取的信息。 - Günter ZöchbauerReactiveFormsModule
提供了一种查询FormControl
上验证器的方法,并提供了一种确定哪些特定的AsyncValidators
处于“PENDING”状态的方法,那就太好了,但是它没有,所以我们最终陷入了验证器具有状态的情况。 - marked-down