我正在看这个答案: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
?
答案 0 :(得分:1)
angular.module('httpReal', ['ng'])...
的上下文是已加载ngMockE2E
module的应用。具有模拟实现的模块overrides $httpBackend
服务。覆盖服务后,$injector
无法获得原始服务。
angular.injector(['ng']).get('$httpBackend')
应该返回原始$httpBackend
服务的实例。
装饰器保证模拟的$httpBackend
将以懒惰但坚实的方式替换为原始实现。如果没有使用该服务,则不会实例化该服务。装饰服务并不依赖于服务加载顺序,只能由另一个装饰器覆盖。
自Angular 1.4起,整个config
事物可以被decorator
method取代。