См. Мое доказательство концепции: http://plnkr.co/edit/y3pzFv?p=preview.AngularJS как настроить провайдера между двумя модулями?
Как настроить поставщика между двумя модулями?
Краткое описание: Я пытаюсь обобщить сервис и настроить несколько экземпляров несколько иначе.
Прямо сейчас у меня есть куча угловых сервисов (фабрика), которые я бы хотел обобщить, чтобы их можно было повторно использовать. В моем доказательстве концепции я пытаюсь разбить приложение AngularJS 1.3 на 2 модуля «bob» и «joe». Каждый модуль должен совместно использовать Провайдера, который должен иметь настраиваемую переменную, называемую пищей. Я пытаюсь определить повторно используемую службу и создать отдельный экземпляр для каждого модуля.
Я прочитал Угловую документацию о Провайдерах, и из того, что я понимаю, поставщики услуг позволяют вам извлечь настраиваемую часть в .config(). Что я делаю не так? Я ожидал бы, что Пища Боба будет Бананом, но Пища Джо, которая настроена во-вторых, перезаписывает Пищу Боба. Это заставляет меня думать, что поставщик продуктов питания не создает новый экземпляр для каждого из модулей «bob» и «joe».
Я на AngularJS v1.3.15
index.html
<div ng-controller="BobCtrl">Bob's Food: {{ providerInstance.get() }}</div>
<div ng-controller="JoeCtrl">Joe's Food: {{ providerInstance.get() }}</div>
app.js
angular.module('shared').provider('Food', function() {
var _food = 'Default';
this.set = function(food) { _food = food; }
this.$get = function() {
return {
get: function() {
return _food;
}
}
};
});
angular.module('bob').config(function(FoodProvider) {
FoodProvider.set('Banana');
});
angular.module('bob').controller('BobCtrl', function($scope, Food) {
$scope.providerInstance = Food;
});
angular.module('joe').config(function(FoodProvider) {
FoodProvider.set('Apple');
});
angular.module('joe').controller('JoeCtrl', function($scope, Food) {
$scope.providerInstance = Food;
});
В конечном счете, когда приложение загружается, будет только один экземпляр провайдера, и он загружается только один раз, а не для каждого подмодуля. [Этот ответ мог бы прояснить некоторые вещи] (http://stackoverflow.com/questions/30653248/are-dependencies-shared/30653736#30653736). Если бы вы разместили 'joe' перед' bob' в списке зависимостей, вы увидите 'banana', потому что конфигурация каждого из этих подмодулей выполняется в том порядке, в котором они зарегистрированы, и одна переопределяет другую. Вы можете сохранить это как KVP, как это. http://plnkr.co/edit/z2ACAr?p=preview – PSL
Возможный дубликат [провайдера Angularjs с различными конфигурациями в разных модулях] (http://stackoverflow.com/questions/30002538/angularjs-provider-with-different- конфигурации-в-разных-модулей) –