您好我正在尝试创建一个有角度的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,我认为这是因为自定义验证器代码没有被执行。
有没有人有任何想法,我做错了什么?
编辑:我注意到如果清空输入,验证器会再次执行。