Angular, utilisation dâun routeur
Jâaimerais pouvoir afficher au choix, dans ma webapp, les actualitĂ©s ou les âcoups de cĆurâ en cliquant sur un lien et ça sans recharger ma page et sans que lâĂ©tat des autres composants ne soient impactĂ©s (mon formulaire de saisie ou ma liste de livres).
Pour cela il existe dans Angular le composant nRoute
et nous allons voir comment nous en servir.
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
Préparation
Nous avons besoin dâune nouvelle dĂ©pendance : angular-route.min.js
Donc modifiez votre fichier bower.json
de la maniĂšre suivante:
{
"name": "books",
"version": "0.0.0",
"dependencies": {
"angular" : "1.2.16",
"angular-resource" : "1.2.16",
"angular-route": "1.2.16",
"uikit" : "2.6.0"
}
}
Et lancez la commande bower update
pour télécharger dans votre projet angular-route
.
Ensuite dans la page index.html
ajoutez en bas de page avec les autres définitions de script, la définition suivante:
<script src="bower_components/angular-route/angular-route.min.js"></script>
Quâest quâun routeur selon Angular?
Un routeur dans Angular est un composant qui est capable de dĂ©tecter la modification dâune url par une saisie dans la zone dâurl du navigateur ou par le biais dâun click sur un lien et de dĂ©clencher une action en fonction et mettre Ă jour le chargement dâune vue par le biais de la directive ng-view
. Câest Ă dire, si vous avez dans votre page html un tag comme celui-ci <div ng-view></div>
, le routeur pourra non seulement dĂ©clencher une action, mais aussi charger un template Ă lâintĂ©rieur de ce tag (de la mĂȘme maniĂšre que la directive ng-include
). Pas clair?
Ok, rien de mieux quâun exemple, alors.
Modifions légÚrement notre IHM
Modifions index.html
comme suit:
Insérez la liste ci-dessous :
Remarquez de quelle maniÚre sont renseignées les attributs href
: on fait prĂ©cĂ©der lâurl par # /
.
Ajoutez cette balise:
Et le reste ne change pas:
Notre 1er routeur
ngRoute
Commençons par ajouter la dépendance ngRoute
Ă notre module principal
Puis définissons notre routeur et son fonctionnement avec la méthode config
de notre module principal en lui passant en paramĂštre $routeProvider
:
Que venons nous de faire? A chaque fois que je cliquerais sur <a href="# /actualites">Actualités</a>
le fichier "templates/actualites.html"
sera chargé dans <div ng-view></div>
et le contrĂŽleur "ActualitesCtrl"
sera appelé.
De la mĂȘme maniĂšre, lorsque je cliquerais sur <a href="# /coupsdecoeur">Coup de coeur</a>
le fichier "templates/coupsdecoeur.html"
sera chargé dans <div ng-view></div>
et le contrĂŽleur "CoupsDeCoeurCtrl"
sera appelé.
A noter: si dans la barre dâurl du navigateur vous saisissez http://localhost:3000/# /actualites ou http://localhost:3000/# /coupsdecoeur, les actions dĂ©crites ci-dessus seront dĂ©clenchĂ©es de la mĂȘme façon (sans rechargement de page), ce qui vous permet de bookmarquer lâĂ©tat de votre webapp (par exemple, avoir un lien direct sur lâĂ©tat qui affiche les actualitĂ©s).
DĂ©finissons nos templates
Créez un sous-répertoire templates
avec 2 fichiers actualites.html
et coupsdecoeur.html
:
votre_projet/
âââ public/
| âââ bower_components/ /* angular est par ici */
| âââ js/
| | âââ main.js
| âââ books/
| | âââ bookForm.html
| | âââ booksList.html
| âââ templates/
| | âââ actualites.html
| | âââ coupsdecoeur.html
| âââ index.html
|
Avec les contenus suivants:
actualites.html
coupsdecoeur.html
Et enfin, âŠ
Ăcrivons les contrĂŽleurs correspondants
Donc dans /public/js/main.js
, ajoutons les contrĂŽleurs suivants
ActualitesCtrl
CoupsDeCoeurCtrl
Vous pouvez maintenant tester votre webapp:
Passer des paramĂštres aux urls
Il est tout Ă fait possible de passer des paramĂštres via lâurl. Par exemple, ajoutez la route suivante au routeur:
Créez le contrÎleur AdditionCtrl
:
Créez rapidement un template templates/addition.html
:
Maintenant vous pouvez faire des additions de cette maniĂšre : http://localhost:3000/# /addition/5/60
Alors je trouve quelques limitations Ă ce routeur, jâaurais aimĂ© pouvoir utiliser plusieurs routeurs et plusieurs ng-view
, mais je pense quâil faut que jâapprenne encore Ă lâutiliser. Jâai vu quâil existait des directives angular dans des projets externes qui le permettait. Nous le verrons peut-ĂȘtre plus tard.
Le prochain tuto sur Angular sera probablement sur la maniĂšre dâorganiser son code, ensuite nous parlerons des tests, et aprĂšs ⊠Nous verrons bien.
A suivre âŠ
Tweet