J'ai une directive "EnsureUniqueValidator" pour vérifier l'unicité des valeurs dans la base de données. La fonction est générique. Il est appelé dans la page HTML de la manière suivante:
<input type="email" name="email" ng-model="userCtrl.user.email"
required ensure-unique-validator />
Code de la directive:
app.directive('ensureUniqueValidator', [
'$http',
function($http) {
return {
restrict : 'A',
require : 'ngModel',
link : function(scope, ele, attrs, c) {
c.$parsers.push(function(val) {
return $http.get(
'MainServlet.do?method=is' + attrs.name
+ 'unique&' + attrs.name + '='
+ val).then(
function(result) {
console.log(result.data);
c.$setValidity('ensureUniqueValidator',
result.data);
return result.data;//returns true or false
});
});
}
}
} ]);
Le problème est, le formulaire reste valable même si le serveur est revenu comme faux. On dirait que la fonction $ setValidity n'invalide pas le formulaire.
Est-ce que je fais quelque chose de mal ici? Merci d'avance.
Voir https://docs.angularjs.org/guide/forms#custom-validation. Vous devriez utiliser 'c. $ AsyncValidators', pas' c. $ Parsers' – Phil
Merci pour le lien. La directive est appelée correctement et la fonction setValidity est également appelée. Pourriez-vous s'il vous plaît préciser pourquoi le code ci-dessus ne fonctionne pas ?, J'avais essayé asyncValidators mais le résultat était le même. Je vais essayer avec le lien que vous avez fourni mais si vous pouvez me signaler ce qui ne va pas dans le code ci-dessus, ce serait très utile pour éclaircir mon doute. Merci encore. – JVM
Jetez un oeil à l'exemple de code ('script.js') sous le lien * Custom Validators * ci-dessus. La directive 'username' est similaire à ce que vous voulez. Vous avez simplement besoin de retourner une promesse – Phil