При работе над большими проектами в 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 раньше других. Я нахожу эту идею плохой.
- Я могу поместить объявление в app.js, чтобы app.js теперь выглядел так
angular.module('myApp', ['X']); angular.module('X', [/*some dependencies could go here*/]);
Я нахожу эту идею лучше, чем предыдущую, однако мне не нравится, что объявление модуля вне каталога X. - В каталоге X/ я создаю файл main.js и помещаю в него объявление модуля X. Я должен позаботиться о том, чтобы включить этот файл в index.html перед другими файлами из каталога X/.
Мне это решение нравится лучше всего.
Есть ли лучший способ сделать это?