Angular, organisation de projet
Bon, notre projet devient vite un peu âpĂ©nibleâ Ă maintenir dâun point de vue âjavascriptâ, tout est dans main.js
.
Nous allons donc âsplitterâ ça en plusieurs fichiers. Nous nâallons pas utiliser Require.js (soit dit en pensant, vu les possibilitĂ© de modularisation dâAngular, je ne suis pas convaincu du tout dâavoir besoin de Require).
Alors, la structure que je vais vous proposer nâest pas parfaite, il y a dâautre moyens de faire, Ă vous de dĂ©cliner en fonction de vos rĂšgles projets, sensibilitĂ©s, habitudes, etc. âŠ
Une piste serait dâorganiser dâune maniĂšre plus âfonctionnelleâ, mais câest un autre sujet (que jâaborderais certainement).
Pré-requis: avoir lu les articles précédents:
- http://k33g.github.io/2014/05/17/ANGULAR-01.html
- http://k33g.github.io/2014/05/18/ANGULAR-02.html
- http://k33g.github.io/2014/05/19/ANGULAR-03.html
- http://k33g.github.io/2014/05/20/ANGULAR-04.html
- http://k33g.github.io/2014/05/21/ANGULAR-05.html
- http://k33g.github.io/2014/05/24/ANGULAR-06.html
- http://k33g.github.io/2014/05/25/ANGULAR-07.html
- http://k33g.github.io/2014/05/26/ANGULAR-08.html
- http://k33g.github.io/2014/05/27/ANGULAR-09.html
Préparation
Apportons quelques modifications Ă lâarborescence de notre projet:
Dans le répertoire js
, nous allons créer un répertoire controllers
avec 4 fichiers javascript:
js/
âââ controllers/
âââ ActualitesCtrl.js
âââ AdditionCtrl.js
âââ CoupsDeCoeurCtrl.js
âââ MainCtrl.js
Ensuite, toujours dans le répertoire js
, nous allons créer un répertoire factories
avec 2 fichiers javascript:
js/
âââ factories/
âââ Book.js
âââ Models.js
Nous devrions donc avoir la structure suivante:
votre_projet/
âââ public/
| âââ bower_components/ /* angular est par ici */
| âââ js/
| | âââ controllers/
| | | âââ ActualitesCtrl.js
| | | âââ AdditionCtrl.js
| | | âââ CoupsDeCoeurCtrl.js
| | | âââ MainCtrl.js
| | âââ factories/
| | | âââ Book.js
| | | âââ Models.js
| | âââ main.js
| âââ books/
| | âââ bookForm.html
| | âââ booksList.html
| âââ templates/
| | âââ actualites.html
| | âââ addition.html
| | âââ coupsdecoeur.html
| âââ index.html
âââ bower.json
âââ .bowerrc
Refactoring, câest parti!
Maintenant nous allons passer dans chacun des nouveaux fichiers.
Models.js
Nous allons extraire le code concernant les modĂšles dans main.js
pour le âtransfĂ©rerâ dans Model.js
.
Avant (dans main.js
):
AprĂšs (dans /factories/Models.js
):
La modification nâest pas Ă©norme.
- Il faut bien penser Ă encapsuler le code dans
(function () { //foo }());
(module âpatternâ, allez lire ceci http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html). - Et dĂ©clarer notre
Models
dans le module principal :angular.module("booksApp").factory("Models", Models);
Book.js
Nous allons extraire le code dans main.js
pour le âtransfĂ©rerâ dans Book.js
, sur le mĂȘme principe que prĂ©cĂ©demment:
Avant (dans main.js
):
AprĂšs (dans /factories/Book.js
):
- Il faut bien penser Ă encapsuler le code dans
(function () { //foo }());
- Attention, il faut passer la dépendance :
$resource
, alorsBook.$inject = ["$resource"]
nâest pas forcĂ©ment obligatoire, mais si vous minifiez votre code, ça peut vous rendre service - Et dĂ©clarer notre factory
Book
dans le module principal :angular.module("booksApp").factory("Book", Book);
Nous allons utiliser le mĂȘme principe pour les contrĂŽleurs :
ActualitesCtrl.js
AprĂšs (dans /controllers/ActualitesCtrl.js
):
CoupsDeCoeurCtrl.js
AprĂšs (dans /factories/CoupsDeCoeurCtrl.js
):
AdditionCtrl.js
AprĂšs (dans /factories/AdditionCtrl.js
):
Et enfin :
MainCtrl.js
AprĂšs (dans /factories/MainCtrl.js
):
Encore quelques modifications
main.js
LĂ aussi utilisons le module âpatternâ. Maintenant, votre code doit ressembler Ă ceci:
Bien sĂ»r, rien ne vous empĂȘche dâexternaliser filter
et config
Et finalement:
index.html
Il ne faut bien sĂ»r pas oublier de rĂ©fĂ©rencer tous nos scripts: (il existe des solutions simples pour faciliter la gestion de ces rĂ©fĂ©rences mais câest un autre sujet).
ET hop, câest fini! Vous pouvez tout relancer, cela fonctionne comme avant et votre projet est plus facile Ă maintenir.
Bon pont!
Tweet