我有角度模块angular.validators,它是validator.js的包装器。到目前为止,每次更新validator.js时,我都会复制源代码并将其粘贴到我的服务上,然后将其提供给我的指令。
我决定自动执行该过程,并使用以下内容替换服务代码:
.service('validator', ['$http', '$q', 'validator_version', function ($http, $q, version) {
var deferred = $q.defer();
$http.get('https://cdn.rawgit.com/chriso/validator.js/'+ version + '/validator.js')
.then(function(result){
deferred.resolve(result.data);
});
return deferred.promise;
}])
我知道它不应该起作用,因为验证器会返回一个承诺,而在我的指令中,我将其视为常规函数,例如:
.directive('contains', ['validator', function (validator) {
return {
require: 'ngModel',
restrict: 'A',
link: function (scope, element, attrs, controller) {
controller.$validators.contains = function (modelValue, viewValue) {
if (controller.$isEmpty(modelValue)) {
return true;
}
return validator.contains(viewValue, attrs.contains);
};
}
};
}])
但是当我进行业力测试时,奇怪的是所有测试都没有问题(总共81次测试atm)。我认为这很奇怪,然后为我的模块创建了一个测试项目,当我在浏览器上实时运行时,所有指令都失败了,因为它们不可用。为什么会出现这种情况?
更新:我已将奇数代码移动到新分支here。