4
我正在嘗試使用自定義的Angular 2表單Validator
來檢查用戶是否存在於數據庫中。將自定義服務注入到自定義驗證程序中
這是我的自定義窗體Validator
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' – Hanzo
不客氣!很高興聽到這個爲你工作:) –
對不起還有一個問題。在'EmailValidator'上如果郵件存在,將會返回什麼?我的意思是'返回this.api.CheckUser(control.value)。然後(響應=> { 如果(response.msg === 「存在」){ 響應; } 否則{ 空; } }); '在這兩種情況下,驗證都是成功的,如果用戶存在,會返回什麼? – Hanzo