Javascript s’est depuis longtemps imposé comme le principal langage pour développer des écrans web dynamiques. L'émergence des SPA (Single Page Application) est en fait l'aboutissement logique du succès de ces outils au premier rang desquels on compte jQuery et AJAX.
AngularJS fait partie d’une nouvelle génération de frameworks qui propose d’aller plus loin afin d’avoir non seulement des SPA améliorant l’expérience utilisateur mais aussi un code mieux organisé, plus modulaire et donc facilement testable.
Au cours de cette soirée, vous verrez d’abord la manière dont AngularJS étend le HTML à travers les directives puis le binding bidirectionnel, ensuite, la programmation asynchrone avec AngularJS. Enfin pour finir, nous allons voir ces petits plus qui expliquent la popularité du framework : les filtres, l’injection de dépendance et les tests.
2. AngularJS : un framework web
⦿Un framework web
⦿ Templating + Routage
⦿ Dialogue avec les services du back-end
⦿ MCV / MVVM
⦿ Un framework web Javascript & front-end
⦿ AngularJS s’exécute dans le navigateur
⦿ Controlleurs + Model en Javascript
⦿Développement de SPA
2014-09-30 Introduction à AngularJS
3. Planning de la soirée
⦿Une première application AngularJS
⦿ Extension du langage HTML : les directives
⦿ Vues, scopes et data-binding
⦿ Structure du code avec AngularJS
⦿Appels asynchrones au back-end
⦿ Injection de dépendances et tests
⦿ Points à surveiller
2014-09-30 Introduction à AngularJS
4. Préambule
⦿ Framework 100% Javascript vs Frameworks
PHP/Java/Flash/SilverLight..
⦿ Un langage déjà présent dans “tous” les navigateurs
● => Pas de plugin
⦿ Avec les frameworks “server side”, JSF, Struts etc.,
on fini toujours par rajouter du code Javascript
● =>Code fragmenté en plusieurs langages
⦿Navigateurs plus puissants que jamais
● =>Décharger le serveur en exploitant la puissance du
client
2014-07-10 Introduction à AngularJS
9. Qu’est-ce qu’une directive ?
⦿Une directive = Flag placé dans la vue
⦿Une directive = Elément | Attribut |
commentaire HTML | Classe CSS
⦿Les navigateurs ne reconnaissent pas ces
flags : c’est à AngularJS de les traiter
⦿Une directive => un script JS indiquant le
traitement que AngularJS doit effectuer
2014-07-10 Introduction à AngularJS
11. Exemple de directive
⦿ Use case :
⦿ Un bouton de commande qui demande une
confirmation
⦿ La vue
<soat-confirmation-button
action=”doVeryDangerousAction”
message=”Opération est irréversible. Continuer ?” />
⦿ Le traitement associé
⦿ le script soat-confirmation-button.js
2014-07-10 Introduction à AngularJS
13. Directives : quand les utilser ?
⦿Comment savoir qu’on a besoin d’une
directive ?
⦿Envie irrésistible de parsing du DOM
⦿Un bloc de HTML qui se répète
⦿Composant de formulaire : calendrier, zone de saisie
...
⦿ Attention à vérifier d’abord les directives
natives de Angular ou de la communauté
2014-07-10 Introduction à AngularJS
14. Vues, scopes et data-binding
2014-07-10 Introduction à AngularJS
15. Scope
⦿ Scope = contexte d’évaluation des expressions
AngularJS
⦿ un scope = un objet Javascript
⦿ Hiérachie de scope :
⦿ $rootScope le scope de 1er niveau rattaché à ng-app
⦿ Scope propres à ng-controller
2014-07-10 Introduction à AngularJS
17. Contenu d’une vue AngularJS
⦿ Le code HTML classique
⦿ Les directives
⦿ Les expressions AngularJS
⦿ Instruction qui va etre interprété par AngularJS
⦿ A l’intérieur des doubles accolades {{}}
⦿ comme valeurs des directives
⦿ Les filtres
⦿ Fonction qui transforme un objet en un autre
2014-07-10 Introduction à AngularJS
20. Directives vs Controllers vs Services
⦿ Directives
⦿ Manipulation de DOM
⦿ Composants IHM re-utilisables
⦿ Les services
⦿ Dialogue avec le back-end/appels HTTP
⦿ Code métier
⦿ Traitement partagés par plusieurs contrôleurs
⦿ Services natifs préfixés ‘$’
2014-07-10 Introduction à AngularJS
21. Directives vs Controllers vs Services
⦿ Controlleurs
⦿ Gestion du scope attaché à une vue
⦿ Gestion des actions utilisateurs
⦿ Les filtres
⦿ Conversion d’un objet en un autre
⦿Exemple : le filtre currency
2014-07-10 Introduction à AngularJS
24. Exemples de use cases
⦿ Cas #1 : agrégateur de news
⦿Interroger Twitter, Google+ et Facebook
⦿Fusionner les trois flux afin d’avoir un flux
unique
⦿ Cas #2 : afficher le détail d’un client
⦿Récupérer les infos usuelles dans SAP via un WS
⦿Récupérer des infos additionnels d’une seconde
BD via un WS
2014-07-10 Introduction à AngularJS
25. Notion de callback
⦿ Callback = fonction
⦿Etant donnée une fonction F, on peut rajouter à F
un argument supplémentaire qui est une fonction a
exécuter en fin de traitement.
⦿ Cas d’un enchaînement d’appels asynchrones:
code illisible / enfer des callback
⦿ Solution au callback-hell : les promesses
⦿Une promesse = Résultat d’un traitement
asynchrone
2014-07-10 Introduction à AngularJS
29. Tests
⦿ Tests unitaires
⦿Injection de dépendances
● On peut mocker facilement les différentes parties de
l’application
● On peut donc tester unitairement
2014-07-10 Introduction à AngularJS
30. Tests : les outils
⦿ Les tests s’exécutent sur la machine de dev
⦿Outil pour exécuter le code Javascript coté serveur
● => NodeJs
⦿Outil JUnit-like pour écrire les tests
● => Mocha, Jasmine, QUnit
⦿Runner pour exécuter les tests
● => +1 Karma
⦿Les tests end-2end
⦿Manipuler le browser via webdriver
● => Protractor
⦿Alternatives à Selenium/Protractor
● => Casper par exemple
2014-07-10 Introduction à AngularJS
32. Attention !!!
⦿ Limites du binding : mémoire (2000 binding ?)
⦿ Pérénité du projet : Google
⦿ Javascript indispensable
⦿ Non respect des bonnes pratiques
⦿Un unique controller pour toute l’application
⦿Code dupliqué dans les différents controllers
⦿Manipulation directe du DOM en dehors des
directives
⦿Code complexe dans les expressions et non dans le
controller
2014-09-30 Introduction à AngularJS
34. Outils
⦿IDE desktop
⦿IDE supportant Javascript
⦿+1 pour WebStorm (44 € par an)
⦿Les navigateurs
⦿Mode developpeur
⦿ Cas du navigateur : Plugin Batarang
⦿Apparemment très utile
2014-09-30 Introduction à AngularJS
35. Documentation
⦿Doc en ligne
⦿https://angularjs.org/
⦿http://goo.gl/EPvajM le groupe Google+
francophone
⦿http://www.frangular.com/
⦿Livres
⦿“Devenez un ninja avec AngularJS” de Ninja Squad
⦿+1 AngularJS de Brad Green et Shyam Seshadri
2014-09-30 Introduction à AngularJS