我的$asyncValidator不工作-Angular Javascript

My $asyncValidator is not working - Angular Javascript

本文关键字:-Angular Javascript 工作 asyncValidator 我的      更新时间:2023-09-26

我正在尝试对电子邮件输入进行异步验证,以检查是否存在。我的指令是这样的:

app.directive('emailExist', ['$http', function ($http) {
return {
    restrict: 'A',
    require: 'ngModel',
    link: function (scope, elem, attrs, ctrl) {
        ctrl.$asyncValidators.emailExist = function (modelValue) {
            return $http({
                method: 'POST',
                url: ''email-existance',
                data: {
                    email: modelValue
                }
            }).then(function(res) {
                console.log(res)
                return (res === 'exist') ? false : true ;
            });
        }
    }
};
}]);

据我所知,异步验证器应该根据验证结果返回true或false。(或者只是同步验证器——如果是,异步返回什么?(

服务器工作并返回我存在的真或假,但在这两种情况下,我的验证都保持有效(即使它检测到电子邮件存在(

请帮帮我!

$asyncValidator应该而不是返回true/false。它需要返回一个被拒绝或已解决的承诺。

预期执行异步验证(例如HTTP请求(的验证集合。所提供的验证函数在模型验证过程中运行时应返回promise。一旦承诺兑现,则当满足时,验证状态将设置为,当被拒绝则验证状态将设为false。

文档

所以你要做的是:

return $http.get('...')
            .then(/** resolve **/)
            .catch(/** reject **/);

或者,如果你的后端只为你提供2xx状态(某些SPA应用程序在某些情况下要求这是真的(,我会在你的then处理程序中检查所述响应的数据,并在延迟对象la $q.defer()上处理解析/拒绝。

例如:

var deferred = $q.defer();
$http.get('...').then(function (res) {
  res.someCondition ? deferred.resolve('yay!') : deferred.reject('boo!');
});
return deferred.promise;