Angular, âEffleurer les ressourcesâ
Les ressources ($resource
) sont un module trĂšs puissant dâAngular. Nous allons aujourdâhui juste effleurer leurs possibilitĂ©s, mais ça sera largement suffisant pour faire pas mal de chose en termes de âdiscussionsâ avec notre serveur http. On peut considĂ©rer $resource
comme un helper âautourâ de $http
pour faciliter des appels Ă des API âRESTfulâ.
A la fin de cet article nous aurons un service capable de faire les requĂȘtes suivantes:
- GET : /books
- GET : /books/{id}
- DELETE : /books/{id}
- POST : /books
- PUT : /books/{id}
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
ou la version âagrĂ©gĂ©eâ : http://e-books.github.io/je.decouvre.angular/
De plus, nous avons besoin du module $resource
présent dans angular-resource
. Veuillez donc ajouter dans votre fichier bower.json
la ligne "angular-resource" : "1.2.16"
, nous avons donc normalement :
{
"name": "books",
"version": "0.0.0",
"dependencies": {
"angular" : "1.2.16",
"angular-resource" : "1.2.16"
}
}
Faite ensuite en mode commande, dans le répertoire du projet un petit:
bower update
Et, allez ajouter dans index.html
(juste aprĂšs le tag <script>
dâAngular) ceci:
Nous sommes bon pour commencer.
Modification de BooksServices
: query
et save
Nous allons complĂštement modifier notre service BooksServices
, vous pouvez tout supprimer Ă lâintĂ©rieur, comme ceci, tout en injectant en paramĂštre $resource
:
Ensuite nous allons définir une ressource au sens Angular :
La simple définition de cette ressource va nous permettre de re-écrire simplement nos méthodes getAll
et create
:
Remarque: il est aussi possible dâutiliser cette notation:
Vous pouvez tester Ă nouveau votre code, vous verrez quâil fonctionne comme avant.
Création des services update
, delete
, getOneById
Si on se limite au paragraphe précédent, on pourrait penser que $resource
nâa que peu dâintĂ©rĂȘt. Ce serait une erreur, voyons donc ce que cela peut nous apporter sans trop dâeffort. Je vous engage Ă lire la documentation et les tutoriaux sur le sujet si vous souhaitez aller plus loin, mais les bases permettent de faire pas mal de choses.
Ajout des services getOneById
et deleteOneById
Dans notre BooksServices
ajoutons déjà 2 méthodes:
getOneById
: permet de retrouver un modĂšle par son iddeleteOneById
: permet de supprimer un modĂšle par son id
Modification du contrĂŽleur
Ajoutons 2 méthodes à notre contrÎleur:
getBook
deleteBook
Services Express correspondant Ă ajouter
Allons ajouter le code des services JSON dans lâapplication Express en ajoutant ceci dans le fichier app.js
:
Vu que nous nâavons pas modifiĂ© lâIHM pour tenir compte de ces services, vous pouvez juste ajouter provisoirement ceci Ă la fin de votre contrĂŽleur Angular:
Cela vous permettra âdâessayerâ vos services dans la console de votre navigateur en passant des commandes de ce type:
getBook({ title: 'Hello World!', description: 'le chemin du programmeur', _id: '0HC0iIQLD3HJ1YOL' })
ou bien:
deleteBook({ _id: '0HC0iIQLD3HJ1YOL' })
Il en manque un! update
Souvent les API Web (serveur) attendent une requĂȘte de type PUT avec un format comme celui-ci: URL/object/ID. Avec Angular, pour ce cas-lĂ , il faut ĂȘtre plus explicite (si quelquâun a une autre solution je suis preneur) et dĂ©finir explicitement une mĂ©thode update
dans notre ressource, de la maniĂšre suivante:
Nous modifions la ressource dans BooksServices
:
ce qui nous permet de définir le service suivant dans BooksServices
:
Modification du contrĂŽleur
Ajoutons 1 méthode à notre contrÎleur:
updateBook
Services Express correspondant Ă ajouter
Allons ajouter le code du services JSON de mise Ă jour de modĂšle dans lâapplication Express en ajoutant ceci dans le fichier app.js
:
LĂ aussi que nous nâavons pas modifiĂ© lâIHM pour tenir compte de ce service, vous pouvez juste ajouter provisoirement ceci Ă la fin de votre contrĂŽleur Angular:
Cela vous permettra âdâessayerâ le service de mise Ă jour dans la console de votre navigateur en passant cette commande:
updateBook({ title: 'Hello World!', description: 'le chemin du programmeur', level: 'bon' _id: '0HC0iIQLD3HJ1YOL' })
Câest tout pour cette partie, câest relativement simple. Dans une prochaine partie, nous ferons un peu de âcosmĂ©tiqueâ pour rendre notre application plus agrĂ©able Ă utiliser avant de passer Ă des sujet âplus techniquesâ
Tweet