J'essaie de créer un formulaire Angulaire 2 personnalisé Validator
pour vérifier si un utilisateur existe dans une base de données.Injecter un service personnalisé dans un programme de validation personnalisé
C'est le code de mon formulaire personnalisé 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;
});
}
}
Et c'est c'est mon service personnalisé qui est responsable de faire la demande à un api de nœud sur backend
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);
}
Quand je essayer de valider un utilisateur c'est l'erreur qui est affichée
EXCEPTION: Error in ./TextInput class TextInput - inline template:0:0 caused by: No provider for Http! (API -> Http)
Qu'est-ce que je fais mal?
Merci
Merci, vous économisez ma journée. Je ne savais pas comment utiliser un service personnalisé de cette façon dans le 'formBuilder.group' – Hanzo
De rien! Heureux d'entendre cela fonctionne pour vous :) –
Désolé une autre question. Sur le 'EmailValidator' si le mail existe, quel serait le retour? Je veux dire que 'revenir this.api.CheckUser (control.value) .alors (réponse => { if (response.msg === "Exister") { réponse; } else { null;} }); } 'Dans les deux cas, les validations sont réussies. Que retournerait-il si l'utilisateur existait? – Hanzo