J'ai un problème avec la fonction de validation suivante :
export function validateEmailKnownFactory(userAccountService: UserAccountService): {[key: string]: any} {
return (control: AbstractControl) => {
return control
.valueChanges
.debounceTime(1000)
.switchMap(value => userAccountService.checkAvailability(value))
.map(res => {
if (res.json() === false) {
return null;
}
// Le flux de contrôle passe par ici
return {emailKnownValidator: {unknown: true}};
});
};
}
Il ne définit pas l'objet d'erreur (c'est-à-dire {emailKnownValidator: {unknown: true}}
) sur le contrôle de formulaire mais le flux de contrôle passe effectivement au bon endroit.
Maintenant, si je remplace la fonction ci-dessus par la suivante :
export function validateEmailKnownFactory(userAccountService: UserAccountService): {[key: string]: any} {
return (control: AbstractControl) => {
return userAccountService.checkAvailability(control.value)
.map(res => {
if (res.json() === false) {
return null;
}
return {emailKnownValidator: {unknown: true}};
});
};
}
l'objet d'erreur est correctement défini sur le contrôle de formulaire et l'application se comporte comme prévu.
Remarquez la différence : je reçois l' Observable
de control.valueChanges
et j'appelle debounceTime
dessus, tandis que l'autre fonction appelle simplement checkAvailability
directement.
Pour plus de clarté, voici la méthode checkAvailability
:
checkAvailability(email: string) {
let body = 'email=' + email;
return this.http.get(this.urls.USER_ACCOUNT.EMAIL_AVAILABLE + body);
}