Angular JS - Paterne Gaye-Guingnido

36
Introductio n à 2014-09-30 Introduction à AngularJS Paterne Gaye @ptngaye

description

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.

Transcript of Angular JS - Paterne Gaye-Guingnido

Page 1: Angular JS - Paterne Gaye-Guingnido

Introduction à

2014-09-30 Introduction à AngularJS

Paterne Gaye@ptngaye

Page 2: Angular JS - Paterne Gaye-Guingnido

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

Page 3: Angular JS - Paterne Gaye-Guingnido

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

Page 4: Angular JS - Paterne Gaye-Guingnido

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

client2014-07-10 Introduction à AngularJS

Page 5: Angular JS - Paterne Gaye-Guingnido

2014-07-10 Introduction à AngularJS

Une première application AngularJS

Page 6: Angular JS - Paterne Gaye-Guingnido

Une application AngularJS

2014-07-10 Introduction à AngularJS

Page 7: Angular JS - Paterne Gaye-Guingnido

Une application AngularJS

2014-07-10 Introduction à AngularJS

Page 8: Angular JS - Paterne Gaye-Guingnido

2014-07-10 Introduction à AngularJS

Extension du langage HTML

Page 9: Angular JS - Paterne Gaye-Guingnido

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

Page 10: Angular JS - Paterne Gaye-Guingnido

Le compilateur HTML

2014-07-10 Introduction à AngularJS

Page 11: Angular JS - Paterne Gaye-Guingnido

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

Page 12: Angular JS - Paterne Gaye-Guingnido

Exemple de directive

2014-07-10 Introduction à AngularJS

Page 13: Angular JS - Paterne Gaye-Guingnido

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

Page 14: Angular JS - Paterne Gaye-Guingnido

Vues, scopes et data-binding

2014-07-10 Introduction à AngularJS

Page 15: Angular JS - Paterne Gaye-Guingnido

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

Page 16: Angular JS - Paterne Gaye-Guingnido

La fonction $watch du scope

2014-07-10 Introduction à AngularJS

Page 17: Angular JS - Paterne Gaye-Guingnido

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

Page 18: Angular JS - Paterne Gaye-Guingnido

Binding

2014-07-10 Introduction à AngularJS

Page 19: Angular JS - Paterne Gaye-Guingnido

Structure d’une application AngularJS

2014-07-10 Introduction à AngularJS

Page 20: Angular JS - Paterne Gaye-Guingnido

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

Page 21: Angular JS - Paterne Gaye-Guingnido

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

Page 22: Angular JS - Paterne Gaye-Guingnido

La définition des routes

2014-07-10 Introduction à AngularJS

Page 23: Angular JS - Paterne Gaye-Guingnido

Appels asynchrones au back-end

2014-07-10 Introduction à AngularJS

Page 24: Angular JS - Paterne Gaye-Guingnido

Exemples de use cases

2014-07-10 Introduction à AngularJS

⦿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

Page 25: Angular JS - Paterne Gaye-Guingnido

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

Page 26: Angular JS - Paterne Gaye-Guingnido

Les promesses avec AngularJS

2014-07-10 Introduction à AngularJS

Page 27: Angular JS - Paterne Gaye-Guingnido

Injection de dépendances et tests

2014-07-10 Introduction à AngularJS

Page 28: Angular JS - Paterne Gaye-Guingnido

Injection des dépendances

2014-07-10 Introduction à AngularJS

Page 29: Angular JS - Paterne Gaye-Guingnido

Tests

2014-07-10 Introduction à AngularJS

⦿Tests unitaires⦿Injection de dépendances● On peut mocker facilement les différentes parties de

l’application● On peut donc tester unitairement

Page 30: Angular JS - Paterne Gaye-Guingnido

Tests : les outils

2014-07-10 Introduction à AngularJS

⦿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

Page 31: Angular JS - Paterne Gaye-Guingnido

Points à surveiller

2014-09-30 Introduction à AngularJS

Page 32: Angular JS - Paterne Gaye-Guingnido

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

Page 33: Angular JS - Paterne Gaye-Guingnido

Outils et documentation

2014-07-10 Introduction à AngularJS

Page 34: Angular JS - Paterne Gaye-Guingnido

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

Page 35: Angular JS - Paterne Gaye-Guingnido

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

Page 36: Angular JS - Paterne Gaye-Guingnido

2014-09-30 Introduction à AngularJS