Как объявить подмодули в AngularJS
При работе над большими проектами в AngularJS я обнаружил, что мне нравится организовывать код по функциональности.
Это означает, что когда у меня есть какая-то узнаваемая функциональность X (особенно если она многократно используется), я создаю каталог X и помещаю в него все контроллеры, службы и другие части, принадлежащие этой функциональности. Я также объявляю новый модуль под названием X и назначаю все в каталоге X этому модулю.
Структура каталога будет выглядеть примерно так:
scripts/
app.js
controllers/
services/
directives/
filters/
X/
controllers/
services/
directives/
filters/
В app.js есть объявление основного модуля:
angular.module('myApp', ['X']);
Все контроллеры и т.д. в X/принадлежат модулю "X" , что означает, что я извлекаю модуль "X" , как это в этих файлах:
var X = angular.module('X');
Что я не знаю, как это сделать, где объявить модуль "X" ?
Некоторые идеи, которые у меня были:
- Я могу объявить его в одном из контроллеров/сервисов/... и получить его в других контроллерах и т.д., но это звучит не так, потому что я не вижу никакой логики, как выбрать этот контроллер/сервис/... среди прочего, а затем я должен позаботиться о том, чтобы включить его в index.html перед другими. Я нахожу эту идею bad.
- Я могу поместить объявление в app.js, поэтому app.js теперь будет выглядеть как
angular.module('myApp', ['X']);
angular.module('X', [/*some dependencies could go here*/]);
Я нахожу эту идею лучше, чем предыдущая, но мне не нравится, что объявление модуля находится вне каталога X.
- В каталоге X/I создаем файл main.js и помещаем в него объявление модуля X. Я должен быть осторожным, чтобы включить этот файл в index.html перед другими файлами из каталога X/.
Мне нравится это решение лучший.
Есть ли лучший способ сделать это?
Ответы
Ответ 1
Да. Третий вариант - это лучшее решение. Первый вариант определенно даст боль в шее. Второй вариант добавляет зависимость модуля X в основном приложении, что нежелательно. Вы хотите, чтобы ваш модуль был автономным. Таким образом, третий вариант - лучшее решение.
Вот рекомендации рекомендации по лучшей практике от Google, которые вы на самом деле пытаетесь придерживаться.:) Кроме того, для вас также будет отлично (как рекомендовано лучшей практикой Google) не отделять файлы от артефактов, а это значит, что вам не нужны структуры контроллеров, директив и т.д., Как показано ниже. Также обратите внимание на частичные, CSS и даже тесты в компоненте, содержащиеся в каталоге компонента/модуля. Следовательно, модуль полностью содержится и независим, что помогает в повторном использовании:
sampleapp/
app.css
app.js
app-controller.js
app-controller_test.js
components/
bar/ "bar" describes what the service does
bar.js
bar-service.js
bar-service_test.js
bar-partial.html
foo/ "foo" describes what the directive does
foo.js
foo-directive.js
foo-directive_test.js
foo-partial.html
index.html
Я надеюсь, что это будет полезно.