La blogosphère propose un certain nombre d'articles sur le sujet des instructions de structuration des applications AngularJS telles que celles-ci (et d'autres):
- http://www.johnpapa.net/angular-app-structuring-guidelines/
- http://codingsmackdown.tv/blog/2013/04/19/angularjs-modules-for-great-justice/
- http://danorlando.com/angularjs-architecture-understanding-modules/
- http://henriquat.re/modularizing-angularjs/modularizing-angular-applications/modularizing-angular-applications.html
Cependant, un scénario que je n'ai pas encore rencontré en matière de recommandations et de meilleures pratiques est le cas où vous avez une grande application Web contenant plusieurs applications "mini-spa", et les applications de mini-spa partagent toutes une certaine quantité de code.
Je ne parle pas du cas d’essayer d’avoir plusieurs ng-app
déclarations sur la même page; Je parle plutôt de différentes sections d’un grand site qui ont leur propre ng-app
déclaration unique .
Comme Scott Allen écrit dans son blog OdeToCode :
Un scénario que je n'ai pas trouvé très bien traité est le scénario dans lequel plusieurs applications existent dans la même application Web plus grande et nécessitent un code partagé sur le client.
Existe-t-il des approches recommandées à adopter, des pièges à éviter ou de bonnes structures d'échantillon de ce scénario que vous pouvez indiquer?
Mise à jour - 10/09/2015
MEAN.JS et son dossier de modules sont un projet doté d'une stratégie d'organisation intéressante.
https://github.com/meanjs/mean
https://github.com/meanjs/mean/tree/master/modules
Un autre exemple provient de l'exemple ASP.NET Music Store SPA. https://github.com/aspnet/MusicStore https://github.com/aspnet/MusicStore/tree/master/src/MusicStore.Spa/ng-apps
la source
Réponses:
Voici le design avec lequel je travaille. Je l'ai trouvé utile sur deux projets plus importants que j'ai construits et je n'ai encore rencontré aucun obstacle.
Structure des dossiers
apps/app1/index.html
moment auquel une demande/app1
est reçue. Utilisez des URL conviviales (par exemple,the-first-application/
au lieu deapp1/
et associez-les à l'aide de la technologie de votre serveur, si nécessaire.global.html
dansindex.html
car elle contient le fournisseur inclut (voir ci-dessous).index.html
(voir ci-dessous).ng-app
et la racine<div ui-view></div>
dans leindex.html
.<app-name>.module.js
fichier contenant la définition du module angulaire et la liste des dépendances.<app-name>.js
fichier contenant la configuration et les blocs d'exécution des modules, ainsi que la configuration du routage.parts
dossier contenant les contrôleurs, les vues, les services et les directives des applications dans une structure adaptée à l'application en question . Je ne considère pas les sous-dossiers tels quecontrollers/
,views/
etc. utiles, car ils ne sont pas redimensionnés, mais YMMV.Commencez avec les services et les directives de l'application où ils sont utilisés. Dès que vous avez également besoin de quelque chose dans une autre application, refactorisez-vous dans une bibliothèque. Essayez de créer des bibliothèques cohérentes sur le plan fonctionnel, pas seulement des bibliothèques à directives ou à services.
Les atouts
Je réduis à la fois les fichiers JS et CSS pour les versions, mais je travaille avec des fichiers non minés au cours du développement. Voici une configuration qui supporte ceci:
global.html
. De cette façon, les objets lourds peuvent être chargés à partir du cache lors de la navigation entre les SPA. Assurez-vous que la mise en cache fonctionne correctement.index.html
. Cela ne devrait inclure que les fichiers spécifiques à l'application ainsi que les bibliothèques utilisées.La structure de dossiers ci-dessus facilite la recherche des bons fichiers pour les étapes de construction de la minification.
la source
Les applications à page unique (SPA) ne sont pas vraiment conçues pour être utilisées comme vous le suggérez avec une application vraiment volumineuse et plusieurs mini-SPA dans la principale. Le plus gros problème sera le temps de chargement des pages, car tout doit être chargé à l’avance.
Une façon de résoudre ce problème consiste à utiliser une page de navigation qui vous mènera à des SPA individuels. La page de navigation sera relativement légère et vous ne pourrez alors charger qu'un seul SPA à la fois en fonction de ce qui a été sélectionné. Vous pouvez fournir une barre de liens avec des liens de navigation dans chacun de vos SPA pour que les utilisateurs ne soient pas toujours obligés de revenir à la page de navigation lorsqu'ils doivent se rendre dans une autre zone.
L'utilisation de cette approche peut créer des problèmes avec la persistance des informations dans les SPA. Mais nous parlons de quelque chose que les SPA ne sont pas destinés à faire. Certains cadres peuvent aider à la persistance des données côté client. Breeze est la première qui me vienne à l’esprit, mais il y en a d’autres.
En ce qui concerne la mise en page - plusieurs questions des programmeurs traitent de la mise en page de projets volumineux, en fonction de vos besoins particuliers. Je suis tombé sur celui-ci et celui-ci . Il n’ya rien de magique dans les SPA qui puisse affecter la présentation de votre application au-delà de ce qui a déjà été répondu à ces questions.
Cela dit, il existe différentes approches qui fonctionnent le mieux pour différents projets. Je recommanderais de rester avec la structure de base fournie par le projet de graine angulaire. Créez des dossiers distincts de ceux fournis pour vos packages personnalisés et votre code source. Et dans votre dossier source, utilisez une disposition de projet qui répond à vos besoins.
la source
Si votre application nécessite plusieurs déclarations ng-app sur la même page, vous devez amorcer manuellement le module AngularJS en injectant un nom de module, comme indiqué ci-dessous:
Ce plunker explique comment amorcer manuellement AngularJS.
la source