Angularjs $setValidity 设置为 false 时不会阻止表单提交。这里有什么问题吗?

Angularjs $setValidity is not blocking Form Submission when set to false.. whats wrong here?

我有一个指令 "ensureUniqueValidator" 用于检查数据库中值的唯一性。该功能是通用的。它在 HTML 页面中按以下方式调用:

<input type="email" name="email" ng-model="userCtrl.user.email" 
required ensure-unique-validator />

指令代码:

    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
                                });
                    });
                }
            }
        } ]);

问题是,即使服务器返回 False,表单仍然有效。看起来,$setValidity 函数并未使表单无效。

我是不是做错了什么?提前致谢。

这应该可行(无论如何,根据文档,我还没有写过其中之一)。

主要的事情似乎是承诺应该 resolve 一个有效值或 reject 一个无效值。

// don't forget to inject the $q service
c.$asyncValidators.ensureUniqueValidator = function(modelValue, viewValue) {
    if (ctrl.$isEmpty(modelValue)) {
        // consider empty model valid
        return $q.when();
    }

    var params = {
        method: 'is' + attrs.name + 'unique'
    };
    params[attrs.name] = modelValue;

    return $http.get('MainServlet.do', {
        params: params
    }).then(function(response) {
        if (!response.data) {
            return $q.reject();
        }
        return true;
    });
};