Angular, 1ers pas (la base de la base)
VoilĂ , je me dĂ©cide Ă me mettre sĂ©rieusement (mais en douceur) Ă Angular. Je vais donc apprendre au fur et Ă mesure et rĂ©diger Ă chaque fois ce que jâen ai retirĂ© et compris. Je âmettraisâ ensuite tout ça au âmĂȘme endroitâ dans un e-book par ici http://e-books.github.io/je.decouvre.angular/.
Si vous pensez que je me trompe, que vous nâĂȘtes pas dâaccord, que vous avez des idĂ©es ⊠nâhĂ©sitez pas, une PR sur le repository de lâe-book sera la bienvenue. Gardez seulement Ă lâesprit que câest Ă destination des dĂ©butants, donc je nâattaque pas lâĂ©criture des directives avant un moment.
Préparation
Pré-requis
- nodejs
- npm
- bower
Dans un répertoire créez les fichiers suivants (à la racine) :
bower.json
{
"name": "books",
"version": "0.0.0",
"dependencies": {
"angular" : "1.2.16"
}
}
.bowerrc
{
"directory": "public/bower_components"
}
Ensuite créez un répertoire public
avec le fichier suivant dans ce répertoire:
public/index.html
Ensuite créez un sous-répertoire js
dans public
avec le fichier suivant dans ce répertoire:
public/js/main.js
Ensuite lancez la commande bower install
pour télécharger la librairie Angular.
Nous avons donc la structure de projet suivante:
votre_projet/
âââ public/
| âââ bower_components/ /* angular est par ici */
| âââ js/
| | âââ main.js
| âââ index.html
âââ bower.json
âââ .bowerrc
Architecture minimale dâune application Angular
Une application Angular nécessite au minimum :
- un module principal : le code js qui représente votre application
- au moins un contrĂŽleur (en js) qui contiendra les traitements
- au moins une vue qui est tout simplement du code html contenu dans votre page
- des directives qui sont des attributs des tags html et qui servent Ă faire le lien entre les vues et les contrĂŽleurs
Plus concrÚtement en code ça donnerait ceci :
Module principal
Dans main.js
définissons le module de notre application booksApp
Nous devons expliquer Ă Angular que nous âlionsâ notre page Ă booksApp
, donc dans index.html
, modifier le tag <body>
de la façon suivante avec la directive ng-app
:
Un ContrĂŽleur
Dans main.js
définissons le ContrÎleur MainCtrl
que lâon rattache Ă notre application booksApp
:
$scope
est la variable de contexte qui va contenir des informations accessibles et modifiables Ă la fois par le contrĂŽleur et la vue.
Modifions notre contrĂŽleur pour quâil puisse nous fournir une liste de livres:
Une Vue
Et modifions notre code html de la façon suivante :
Nous avons donc utilisé 2 directives supplémentaires :
<div ng-controller="MainCtrl">
pour lier notre contrĂŽleur au<div>
<div ng-repeat="book in books">
pour parcourir le contenu de$scope.books
Et du templating pour afficher tout ça :
Vous pouvez dĂšs maintenant afficher votre page avec la liste des livres en ouvrant index.html
dans votre navigateur préféré.
Ajouter un formulaire de saisie pour modifier les livres
Modifier les livres
Commençons par ajouter 2 propriétés levels
, selectedBook
et une méthode selectBook
Et dans notre vue ajoutons le formulaire suivant :
Et modifions la portion de code précédente en y ajoutant la directive ng-click="selectBook(book)"
Donc Ă chaque fois que nous âcliqueronsâ sur la ligne dâun livre la mĂ©thode selectBook(book)
du contrÎleur sera appelée et mettra à jour la propriété $scope.selectedBook
avec le livre sélectionné.
Et le formulaire de saisie sera mis Ă jour automatiquement grĂące aux directives :
ng-model="selectedBook.title"
ng-model="selectedBook.description"
ng-model="selectedBook.level"
ng-options="level for level in levels"
Vous pouvez dÚs maintenant essayer, et vous allez vous apercevoir que lorsque vous sélectionnez un livre, le formulaire se met à jour, et lorsque vous modifiez les données dans le formulaire, la liste se met à jour automatiquement de maniÚre assez magique, je dois bien le reconnaßtre.
Ajouter un livre
Câest encore plus simple, ajoutez la mĂ©thode createBook
Ă votre contrĂŽleur :
Puis ajouter un bouton (<a href="# " ng-click="createBook()">Ajouter un livre</a>
) dans votre page en dessous de la liste des livres:
Le bouton est un lien (pourquoi pas?) avec une directive ng-click="createBook()"
qui permettra dâappeler la mĂ©thode createBook()
de notre contrĂŽleur lorsque lâon clique sur le lien et dâajouter un nouveau livre que vous pourrez ensuite modifier (ok mon workflow nâest pas forcĂ©ment au top mais ça vous donne lâidĂ©e).
Vous pouvez tester :)
Câest tout pour aujourdâhui. Demain je vous montre comment faire âplus propreâ en utilisant les services, les factories et si ça se passe bien on attaque la partie âajaxâ et serveur. Et vous aurez les codes sources en prime et lâebook Ă jour.
A demain :)
Tweet