AngularJS semences: mettre du code JavaScript dans des fichiers séparés (app.js, controllers.js, directives.js, filters.js, services.js)

Je suis en utilisant le angulaire de la graine modèle pour la structure de mon application. Au départ, j'ai mis tout mon code JavaScript dans un fichier unique, main.js. Ce fichier contenait mon module de déclaration, des contrôleurs, des directives, des filtres et des services. L'application fonctionne très bien comme ça, mais je suis inquiet sur l'évolutivité et la maintenabilité que ma demande devient de plus en plus complexe. J'ai remarqué que l'angle de graines de modèle a des fichiers distincts pour chacun d'eux, j'ai donc essayé de distribuer mon code à partir de la seule main.js fichier dans chacun des autres fichiers mentionnés dans le titre de cette question et a trouvé dans le app/js répertoire de la angulaire de la graine modèle.

Ma question est: comment puis-je gérer les dépendances afin d'obtenir l'application au travail? La documentation existante trouvé ici n'est pas très claire à ce sujet, puisque chacun de ces exemples montre un seul fichier source JavaScript.

Un exemple de ce que j'ai est:

app.js

angular.module('myApp', 
    ['myApp.filters',
     'myApp.services',
     'myApp.controllers']);

controllers.js

angular.module('myApp.controllers', []).
    controller('AppCtrl', [function ($scope, $http, $filter, MyService) {

        $scope.myService = MyService; //found in services.js

        //other functions...
    }
]);

filters.js

angular.module('myApp.filters', []).
    filter('myFilter', [function (MyService) {
        return function(value) {
            if (MyService.data) { //test to ensure service is loaded
                for (var i = 0; i < MyService.data.length; i++) {
                    //code to return appropriate value from MyService
                }
            }
        }
    }]
);

services.js

angular.module('myApp.services', []).
    factory('MyService', function($http) {
        var MyService = {};
        $http.get('resources/data.json').success(function(response) {
            MyService.data = response;
        });
        return MyService;
    }
);

main.js

/* This is the single file I want to separate into the others */
var myApp = angular.module('myApp'), []);

myApp.factory('MyService', function($http) {
    //same code as in services.js
}

myApp.filter('myFilter', function(MyService) {
    //same code as in filters.js
}

function AppCtrl ($scope, $http, $filter, MyService) {
    //same code as in app.js
}

Comment puis-je gérer les dépendances?

Merci d'avance.

  • il y a quelques articles à ce sujet. par exemple, briantford.com/blog/huuuuuge-angular-apps.html, et de certains projets, comme yeoman. thereare deux façons de procéder: la séparation des composants par des couches (comme angulaires-graine) ou par fonction, à l'instar de certains articles suggèrent.
  • Lorsque vous déclarez un module par exemple angulaire.module('myApp.service1', []) je pense que vous avez besoin d'ajouter des dépendances à la [] par exemple, angulaire.module('myApp.service1', ['myApp.service2', 'myApp.service2']).. Je suis assez nouveau à AngularJS, donc j'ai peut-être tort. Si cela fonctionne, laissez-moi savoir et je vais poster une réponse.
  • Où faut que la ligne sera insérée? J'ai mis angular.module('myApp.services', ['myApp.services']); en app.js avec pas de chance.
  • 1. Lorsque vous répondez aux commentaires, toujours commencer le commentaire par " @ " et le nom de l'utilisateur (sans les espaces), de sorte que l'utilisateur recevra une notification. 2. myApp.les services devraient être dépendant des autres modules, et non pas sur lui-même, par exemple,angular.module('myApp.services', ['myApp.server', 'myApp.somethingElse']).
  • avez-vous modifier votre commentaire précédent? Je l'ai lu comme angular.module('myApp.service1', ['myApp.service1', 'myApp.service2']) à l'origine. Sinon, je n'aurais pas inclus myApp.des services comme sa propre dépendance.
  • Uniquement pour ajouter la dernière phrase.
  • Alors, pourquoi voulez-vous la liste myApp.service2 deux fois? En tout cas, je ne cherche pas à ajouter des dépendances entre les services, seulement à l'application principale. Donc plus utile exemple serait exactement comme celui trouvé dans mon app.js code.
  • Plus ou moins la même, il suffit d'ajouter les dépendances de l'application de la définition.
  • Trouvé le problème: AppCtrl dépend MyService. Solution ajouter de la dépendance " myApp.services "à la" myApp.des contrôleurs.
  • En fait, il n'est pas nécessaire d'ajouter que la dépendance tant que le fichier html listes le code source pour le service dans une balise script.
  • Est-ce à dire que vous avez essayé?
  • J'ai. Aucun de mes fichiers ont liste des dépendances entre les crochets. Aussi longtemps que j'utilise le contrôleur, le service, le filtre ou le nom de la directive trouvé dans leurs déclarations respectives, alors je peux utiliser n'importe où et AngularJS va les trouver (à condition que le code source contenant la référence se trouve dans une balise html script sur la page correspondante).

InformationsquelleAutor ChrisDevo | 2013-05-27