角度承诺 - 奇怪的行为

时间:2015-08-09 10:33:52

标签: angularjs promise karma-runner

我有角度模块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

0 个答案:

没有答案