我现在正在学习如何使用 AngularJS。我在很大程度上掌握了 Angular 处理依赖注入的方式,但是我找不到答案。
假设我有一项基于用户查询从网络检索数据的服务;它可能看起来像这样:
var webBasedServiceModule = angular.module('WebBasedService', []);
webBasedServiceModule
.factory('webBasedService', function ($http) {
var rootUrl = "http://example.com/myApi?query=";
return {
getData: function(query) {
return $http.get(rootUrl + query)
.then(function(httpCallbackArg) {
return doSomething(httpCallbackArg);
});
}
}
});
我正在注入 $http 服务,所以我可以模拟它进行测试。但是,我在课堂上硬编码了我的 Web 服务的根 URL。理想情况下,我想将此 URL 与服务类分离,并将其作为依赖项注入。但是,我看不到将字符串或其他原语注入角度工厂函数的方法。理想情况下,我希望代码如下所示:
var webBasedServiceModule = angular.module('WebBasedService', []);
webBasedServiceModule
.factory('webBasedService', function ($http, rootUrl) {
return {
getData: function(query) {
return $http.get(rootUrl + query)
.then(function(httpCallbackArg) {
return doSomething(httpCallbackArg);
});
}
}
});
我可以看到的一种解决方案是创建一个UrlProviderService
并将该服务注入到WebBasedService
模块中,然后调用urlProvider.Url
或类似的方法。这似乎有点臭:只为一个配置数据创建一个全新的服务似乎有点矫枉过正。我什至可以想象我可以创建一个字符串形式的服务,如下所示:
var urlServiceModule = angular.module('UrlService', []);
urlServiceModule
.factory('rootUrl', function () {
return "http://example.com/myApi?query=";
});
不过,这似乎是对服务概念的滥用。
AngularJS 是否为将原语作为配置数据注入的问题提供了“标准”解决方案?还是我只使用上述解决方案之一?