J'ai tous mes contrôleurs AngularJS dans un seul fichier, controllers.js. Ce fichier est structuré comme suit:
angular.module('myApp.controllers', [])
.controller('Ctrl1', ['$scope', '$http', function($scope, $http) {
}])
.controller('Ctrl2', ['$scope', '$http', function($scope, $http) }
}])
Ce que j'aimerais faire, c'est mettre Ctrl1 et Ctrl2 dans des fichiers séparés. J'inclurais alors les deux fichiers dans mon index.html, mais comment cela devrait-il être structuré? J'ai essayé de faire quelque chose comme ça et cela lance une erreur dans la console du navigateur Web disant qu'il ne peut pas trouver mes contrôleurs. Des indices?
J'ai recherché StackOverflow et trouvé cette question similaire - cependant, cette syntaxe utilise un framework différent (CoffeeScript) au-dessus d'Angular, et donc je n'ai pas pu suivre.
AngularJS: Comment créer des contrôleurs dans plusieurs fichiers
la source
appCtrl
est un mondialwindow.appCtrl
. Ce n'est pas une bonne pratique.L'utilisation de l'API angular.module avec un tableau à la fin indiquera à angular de créer un nouveau module:
myApp.js
L'utiliser sans le tableau est en fait une fonction getter. Donc pour séparer vos contrôleurs, vous pouvez faire:
Ctrl1.js
Ctrl2.js
Pendant vos importations javascript, assurez-vous juste que myApp.js est après AngularJS mais avant tous les contrôleurs / services / etc ... sinon angular ne pourra pas initialiser vos contrôleurs.
la source
Bien que les deux réponses soient techniquement correctes, je veux introduire un choix de syntaxe différent pour cette réponse. Cet imho facilite la lecture de ce qui se passe avec l'injection, la distinction entre etc.
File One
Fichier deux
Fichier trois
la source
Et cette solution? Modules et contrôleurs dans les fichiers (à la fin de la page) Il fonctionne avec plusieurs contrôleurs, directives et ainsi de suite:
app.js
myCtrl.js
html
Google a également une recommandation de meilleures pratiques pour la structure des applications angulaires que j'aime vraiment regrouper par contexte. Pas tous les html dans un dossier, mais par exemple tous les fichiers de connexion (html, css, app.js, controller.js et ainsi de suite). Donc, si je travaille sur un module, toutes les directives sont plus faciles à trouver.
la source
Par souci de concision, voici un exemple ES2015 qui ne repose pas sur des variables globales
la source
name
.. vous pouvez donc simplement les utiliserExampleCtrl.name
au lieu de les dupliquer .. en les tripliquant.Pas si gracieux, mais la solution d'implémentation très simple - utilisant une variable globale.
Dans le "premier" fichier:
dans le "deuxième", "troisième", etc:
la source
angular.module('myApp').controller('ProductCtrl', ['$scope', '$http', function($scope, $http){ //Your ProductCtrl code goes here }]);