"Найкращий" спосіб оголошення модуля
Оскільки кутовий знаходиться у самій глобальній області, а модулі зберігаються до його змінної, ви можете отримати доступ до модулів за допомогою angular.module('mymod'):
// one file
// NOTE: the immediately invoked function expression
// is used to exemplify different files and is not required
(function(){
// declaring the module in one file / anonymous function
// (only pass a second parameter THIS ONE TIME as a redecleration creates bugs
// which are very hard to dedect)
angular.module('mymod', []);
})();
// another file and/or another anonymous function
(function(){
// using the function form of use-strict...
"use strict";
// accessing the module in another.
// this can be done by calling angular.module without the []-brackets
angular.module('mymod')
.controller('myctrl', ['dep1', function(dep1){
//..
}])
// appending another service/controller/filter etc to the same module-call inside the same file
.service('myservice', ['dep2', function(dep2){
//...
}]);
// you can of course use angular.module('mymod') here as well
angular.module('mymod').controller('anothermyctrl', ['dep1', function(dep1){
//..
}])
})();
Інші глобальні змінні не потрібні.
Звичайно, все залежить від уподобань, але я вважаю, що це найкраща практика
- вам не доведеться забруднювати глобальну сферу
- Ви можете отримати доступ до своїх модулів скрізь і за власним бажанням сортувати їх та їх функції
- ви можете використовувати функціональну форму "використовувати строгий";
- порядок завантаження файлів не має великого значення
Параметри сортування модулів та файлів
Цей спосіб декларування та доступу до модулів робить вас дуже гнучкими. Ви можете сортувати модулі за типом функції (як описано в іншій відповіді) або маршрутом, наприклад:
/******** sorting by route **********/
angular.module('home')...
angular.module('another-route')...
angular.module('shared')...
Як ви їх сортуєте в підсумку - це питання особистого смаку та масштабу та типу проекту. Мені особисто подобається групувати всі файли модуля всередині однієї папки (упорядковані у підпапки директив, контролерів, служб та фільтрів), включаючи всі різні тестові файли, оскільки це робить ваші модулі більш багаторазовими. Таким чином, в середніх проектах я закінчую базовим модулем, який включає всі базові маршрути та їх контролери, служби, директиви та більш-менш складні підмодулі, коли я думаю, що вони можуть бути корисні і для інших проектів, наприклад :
/******** modularizing feature-sets **********/
/controllers
/directives
/filters
/services
/my-map-sub-module
/my-map-sub-module/controllers
/my-map-sub-module/services
app.js
...
angular.module('app', [
'app.directives',
'app.filters',
'app.controllers',
'app.services',
'myMapSubModule'
]);
angular.module('myMapSubModule',[
'myMapSubModule.controllers',
'myMapSubModule.services',
// only if they are specific to the module
'myMapSubModule.directives',
'myMapSubModule.filters'
]);
Для дуже великих проектів я іноді закінчую групування модулів за маршрутами, як описано вище, або за деякими вибраними основними маршрутами або навіть комбінацією маршрутів та деякими вибраними компонентами, але це дійсно залежить.
EDIT:
Просто тому, що це пов'язано, і я нещодавно знову зіткнувся з цим: подбайте про те, щоб ви створили модуль лише один раз (додавши другий параметр до функції angular.module-функції). Це зіпсує вашу програму і може бути дуже важко виявити.
2015 EDIT щодо сортування модулів:
півтора року кутового досвіду пізніше, можу додати, що переваги від використання модулів, які по-різному називаються у вашій програмі, дещо обмежені, оскільки AMD все ще не дуже добре працює з кутовими та сервісами, директивами та фільтрами в будь-якому випадку є всесвітньо доступними всередині кутового контексту ( як пояснено тут ). Однак все ж є семантична та структурна вигода, і може бути корисним можливість включення / виключення модуля з одним рядком коду, коментованого вхід або вихід.
Також майже ніколи не має сенсу розділяти підмодулі за типом (наприклад, "myMapSubModule.controllers"), оскільки вони зазвичай залежать один від одного.