2015-09-01 3 views
2

Моего приложения следующий Джона Папа styleguide для AngularJS приложений:Настройки общих служб между несколькими модулями в AngularJS

стилистического справочник подчеркивает, используя сильно модульный подход к проектированию приложения. Мой вопрос касается нескольких конфигураций и их влияния на общие службы.

Предположим, что у меня есть главный модуль, как это:

angular.module("app", ["app.feature1"]) 
    .config(function() { 
    // do some configuration here 
    console.log("app configured"); 
    }); 

и модуль функции, настраивающий общую угловую услугу, скажем, сервис $ Http:

angular.module("app.feature1", []) 
    .config(function($http) { 
    // configure the $http service 
    console.log("feature1 configured"); 
}); 

ли мое понимание правильно, что конфигурация «feature1» будет перенесена на главный модуль, поскольку служба $ http является одноэлементной и, следовательно, разделяется между модулями? Или мне нужно настроить службу $ http в основном модуле вместо этого, потому что каждый модуль имеет свой собственный экземпляр службы http http?

Редактировать: я могу подтвердить, что конфигурации зависимостей переносятся и выполняются первыми. См. Пример jsfiddle Дэвида.

ответ

1

Как можно лучше настроить службы как можно раньше, что обычно является основным модулем (корнем приложения) и желательно только один раз, чтобы избежать перекрывающихся изменений.

С $http - одноэлементный (как вы упомянули), любые изменения через конфигурацию будут распространяться по всему приложению каждый раз, когда вы вводите $http.

Также стоит упомянуть, что конфигурация служб - это First In First Out, что означает, что если у вас есть два изменения конфигурации, последняя конфигурация будет той, которая сохраняется в службе, поскольку предыдущая конфигурация будет перезаписана, если они меняют идентичные компоненты услуги.

В вашем случае, да, изменение в $http в вашем модуле будет распространено на ваше основное приложение и любые другие модули, используя $http.

Наконец, в свете замечаний, конфиги ребенка иждивенцев решены до родительских конфиги, как показано на этой простой скрипкой:

http://jsfiddle.net/maqzo6fv/

HTML:

<div ng-app="app"></div> 

JS:

angular.module("app", ["app.feature1"]) 
    .config(function() { 
     alert('main config'); 
}); 

angular.module("app.feature1", []) 
    .config(function() { 
     alert('child config'); 
}); 

Детский конфиг будет вызывать перед каждой нагрузкой.

+0

Я прав, так как «app.feature1» является зависимостью корневого модуля, «app.feature1» будет создаваться перед конфигурацией основного модуля, и поэтому блок конфигурации функции1 будет выполняться первым? – maxmantz

+0

Если вы посмотрите на типичное угловое приложение и намеренно «сложите» что-то в загруженной зависимости, что произойдет? Вы обнаружите, что следующий код в основном модуле не загружен. Я предполагаю, что здесь, но я считаю, что Angular загружает модули для детей сначала, а затем загружает родительский модуль, который их вводил. Тем не менее, я не могу быть уверен, что '.config()' для ребенка вызывается перед родителем. Возможно, он только строит график зависимости. –

+0

Я могу подтвердить, что сначала выполняются конфигурации зависимостей. Спасибо! – maxmantz

Смежные вопросы