AngularJS, определяющий angular.module() несколько раз
Каково поведение вызова angular.module('myModule')
несколько раз?
Например, я хочу определить свои маршруты и мои директивы в отдельных файлах .js.
Это безопасно?
например:
//routes.js
angular.module('app',['$strap'])
.config(function($routeProvider, $locationProvider) {
...
});
//directives.js
angular.module('app')
.directive('formInput', function() {
...
Кроме того, каково влияние определения зависимостей несколько раз? Является ли эта добавка или последняя в выигрыше?
например:
Ответы
Ответ 1
angular.module(имя [, требуется], configFn);
...
требует (необязательно) - {Array. =} - если задано, то создается новый модуль. Если не указано, то модуль извлекается для дальнейшей настройки. - angular.module docs
Я бы это интерпретировал следующим образом: вы можете определять зависимости только один раз - первый раз, когда вы вызываете angular.module для определенного модуля. Вы можете вызывать angular.module() несколько раз после этого, но параметр requires
не должен указываться.
Ответ 2
Вы должны только создать свой модуль один раз. Согласно docs, если вы создадите модуль с уже существующим именем, он перезапишет предыдущий. (Так что в последний раз.)
angular.module('app', []);
Вы можете получить ваш модуль столько раз, сколько захотите, и в отдельных файлах, если хотите. Обычно вы будете получать свой модуль несколько раз, чтобы объявлять службы, контроллеры, директивы и т.д.
angular.module('app').service('myService', ...);
angular.module('app').controller('myController', ...);
angular.module('app').directive('myDirective', ...);
В AngularJS docs on Modules, см. раздел "Создание против поиска".
Ответ 3
Я новичок в angular, но это мое понимание: вы создаете один модуль в каждом файле с именем имени пространства имен, а в вашем основном модуле вам нужны эти модули.
// in main app.js file
var app = angular.module('myapp',
['myapp.routers', 'myapp.directives', 'myapp.filters']);
// in filters.js
angular.module('myapp.filters', []).filter(....)
// in routers.js
angular.module('myapp.routers', []).router(....)
// in directives.js
angular.module('myapp.directives', []).directive(....)