为什么这个angular.provide需要这个工作?

时间:2016-07-07 23:14:52

标签: javascript angularjs

我正在看这个答案:https://stackoverflow.com/a/26992327/16584并试图了解为什么需要config部分。

angular.module('httpReal', ['ng'])
    .config(['$provide', function($provide) {
        $provide.decorator('$httpBackend', function() {
            return angular.injector(['ng']).get('$httpBackend');
        });
    }])
    .service('httpReal', ['$rootScope', function($rootScope) {
        this.submit = function() {
            $rootScope.$digest();
        };
    }]);

如果没有它,它似乎对我不起作用,但我实际上并不理解为什么需要它,因为我们从来没有首先替换httpBackend

1 个答案:

答案 0 :(得分:1)

angular.module('httpReal', ['ng'])...的上下文是已加载ngMockE2E module的应用。具有模拟实现的模块overrides $httpBackend服务。覆盖服务后,$injector无法获得原始服务。

angular.injector(['ng']).get('$httpBackend')

应该返回原始$httpBackend服务的实例。

装饰器保证模拟的$httpBackend将以懒惰但坚实的方式替换为原始实现。如果没有使用该服务,则不会实例化该服务。装饰服务并不依赖于服务加载顺序,只能由另一个装饰器覆盖。

自Angular 1.4起,整个config事物可以被decorator method取代。