"Meilleure" façon de déclarer un module
Comme angulaire est sur la portée globale de lui-même et les modules sont enregistrés à son variable, vous pouvez accéder à des modules via angular.module('mymod')
:
// one file
(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){
//..
}])
})();
Pas d'autres variables globales sont nécessaires.
Bien sûr, cela dépend tout sur les préférences, mais je pense que c'est la meilleure pratique, comme
- vous n'avez pas à polluer la portée mondiale
- vous pouvez accéder à vos modules de partout et de les trier et de leurs fonctions dans les différents fichiers à volonté
- vous pouvez utiliser la fonction de forme de "use strict";
- l'ordre de chargement des fichiers de n'importe pas autant
Options pour le tri de vos modules et fichiers
Il vous rend très flexible. Vous pouvez trier les modules via la fonction de type (comme décrit dans une autre réponse) ou par la route, par exemple:
/******** sorting by route **********/
angular.module('home')...
angular.module('another-route')...
angular.module('shared')...
Comment vous le tri en fin de compte, dépend du goût personnel et de l'échelle et le type de projet. Personnellement, j'aime à le groupe tous les fichiers d'un module à l'intérieur du même dossier (classés dans des sous-dossiers de directives, des contrôleurs, des services et des filtres), y compris tous les différents test de fichiers, car il rend votre modules réutilisables. Ainsi, en moyenne de la taille des projets, je me retrouve avec une base de module, qui comprend toutes les routes de base et de leurs contrôleurs, des services, des directives et des plus ou moins complexe de sous-modules, quand je pense qu'ils pourraient être utiles pour d'autres projets,par exemple:
/******** 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'
]);
Pour de très gros projets, j'ai souvent le groupement des modules par les routes, comme décrit ci-dessus ou par certaines routes principales, mais ça dépend vraiment.
EDIT:
Juste parce qu'il est lié et je n'ai rencontré que très récemment encore: Prenez bien soin de vous créer un module qu'une seule fois (par l'ajout d'un deuxième paramètre de l'angle.module de fonction). Cela va gâcher votre demande et peuvent être très difficiles à détecter.