2

См. Мое доказательство концепции: 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; 
}); 
+1

В конечном счете, когда приложение загружается, будет только один экземпляр провайдера, и он загружается только один раз, а не для каждого подмодуля. [Этот ответ мог бы прояснить некоторые вещи] (http://stackoverflow.com/questions/30653248/are-dependencies-shared/30653736#30653736). Если бы вы разместили 'joe' перед' bob' в списке зависимостей, вы увидите 'banana', потому что конфигурация каждого из этих подмодулей выполняется в том порядке, в котором они зарегистрированы, и одна переопределяет другую. Вы можете сохранить это как KVP, как это. http://plnkr.co/edit/z2ACAr?p=preview – PSL

+0

Возможный дубликат [провайдера Angularjs с различными конфигурациями в разных модулях] (http://stackoverflow.com/questions/30002538/angularjs-provider-with-different- конфигурации-в-разных-модулей) –

ответ

0

Поскольку все типы угловых провайдеров одноточечно объекты. Последнее состояние объекта-поставщика будет использоваться при попытке ссылаться на них.