Я изучаю свой путь вокруг AngularJS на данный момент. Я в значительной степени справился с тем, как Угловая управляет инъекцией зависимости, но есть пробел, на который я не могу найти ответ.Инъекция примитивного типа в 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 $, так что я могу дразнить его для тестирования. Тем не менее, у меня есть корневой 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 «стандартное» решение проблемы ввода примитивов в качестве данных конфигурации? Или я просто использую одно из решений выше?