我現在正在學習AngularJS的方法。我在很大程度上必須熟悉Angular處理依賴注入的方式,但是我找不到答案。在AngularJS中注入原始類型
說我有一種服務,它根據用戶的查詢從網上檢索數據;它可能看起來像這樣:
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是否提供了將基元注入爲配置數據的「標準」解決方案?或者我只是使用上面的解決方案之一?