好的,所以我正在尝试设置 $httpBackend 以用作针对 API 进行本地开发的模拟服务器。我在不同的模块中有两个服务:search 和 searchMock:
- search 返回一个 $resource 对象,该对象在登台或生产环境中公开 API 动词,并按预期工作
- searchMock 暴露了 $httpBackend ,它反过来用模拟 JSON 对象响应,并按预期工作
我有另一个服务 APIInjector,它根据 Grunt 在构建应用程序时动态包含的配置文件确定当前环境是什么,并相应地注入 search 或 searchMock。
我的问题是,据我从高低搜索中可以看出,$httpBackend 需要在模块的 run 方法中设置。问题是我无法在 APIInjector 的条件逻辑中注入 run 方法。
如果满足开发环境条件,我如何公开 $httpBackend ,否则我的 $resource 服务?请注意,我没有包括调用控制器或 searchService 的代码,但如果需要澄清,我可以。
搜索模拟:
var searchMockService = angular.module('searchMockService', []);
searchMockService.run([
'$httpBackend',
function($httpBackend) {
results = [{name: 'John'}, {name: 'Jane'}];
$httpBackend.whenGET('/search').respond(results);
}]);
API注射器:
var APIInjectorService = angular.module('APIInjectorService', [
'searchService',
'searchMockService'
]);
APIInjectorService.factory('APIInjector', [
'$injector',
'ENV_CONF',
function($injector, ENV_CONF) {
var isDevelopment = ENV_CONF.IS_DEVELOPMENT;
// Check to see if we're in dev and, if so, inject the local API services
if (isDevelopment) {
return {
Search: // Not sure what to do here to expose searchMock's run method???
};
} else {
return {
Search: $injector.get('Search') // This returns $resource from the search service, as expected
};
}
}]);