自定义asyncvalidator未执行

时间:2015-10-23 08:34:59

标签: angularjs angularjs-directive

您好我正在尝试创建一个有角度的asyncValidator,但我认为我做错了,因为它没有被执行。这是我的代码:

(function () {
'use strict';

angular
    .module('project')
    .directive('imageValidator', imageValidator);

imageValidator.$inject = ['utilitiesService', '$q'];

function imageValidator(utilitiesService, $q) {
    var directive = {
        restrict: 'A',
        require: 'ngModel',
        link: link,
    };

    return directive;

    function link(scope, element, attrs, ngModel) {
        ngModel.$asyncValidators.imageValidator = function (url) {
            var deferred = $q.defer();

            if (url) {
                var image = new Image();

                if (utilitiesService.isNotExternalFile(url)) {
                    image.src = utilitiesService.getUrl(url)
                } else {
                    image.src = url;
                }

                image.onload = function () {
                    deferred.resolve(true);
                    scope.$apply();
                }

                image.onerror = function () {
                    deferred.reject(false);
                    scope.$apply();
                }

            } else {
                deferred.resolve(true);
            }

            return deferred.promise;
        }
     }
  }
})();

代码被执行,但是当我在输入中更改内容时它不会被执行。

首次执行时,它会设置类ng-valid-image-validator,这是正确的,如果输入中没有任何内容,我希望它有效。

但是当我在输入中写一些内容时,ng-valid-image-validator被删除了,但它没有添加ng-invalid-image-validator,我认为这是因为自定义验证器代码没有被执行。

有没有人有任何想法,我做错了什么?

编辑:我注意到如果清空输入,验证器会再次执行。

0 个答案:

没有答案