SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
Conception d'Applications
Interactives :
Applications Web et JEE
Séance #1
Côté navigateur
HTML5 / CSS / JS / AngularJS
Côté navigateur
● Les bases du web
○ HTTP, URL, HTML, CSS, JS, AJAX...

● HTML5
○ HTML5, CSS3, le casse-tête des navigateurs...
○ Le web en 2013, le responsive design

● Twitter Bootstrap
○ Outils, échafaudage, LessCSS, JQuery

● Le développeur web en 2013
○ Rôles, technologies, langages, veille technologique

● AngularJS
○ Modèle MVC côté navigateur
AngularJS
● Pourquoi AngularJS ?
● Les bases
AngularJS
HTML enhanced for web apps!
Pourquoi AngularJS ?
Parce qu’on veut faire des vraies applications web
● AngularJS fonctionne sur le principe MVC
○
○

Apporte aux applications web côté client des services
traditionnellement apportés côté serveur
Permet des applications web plus legères et dynamiques

HTML is great for declaring static documents, but it falters
when we try to use it for declaring dynamic views in webapplications. AngularJS lets you extend HTML vocabulary
for your application. The resulting environment is
extraordinarily expressive, readable, and quick to develop.
Mise en garde :
Je suis un développeur web
●

Et lorsque je raconte des histoires, je le fais du point de
vue d’un développeur web

Image : TylkoMrok.pl

Si vous faites des applications client lourd,
vous pourrez trouver que je caricature un peu
Au début il y avait le client lourd
●

Le bloc de base des IHM était le composant :
○
Encapsulation
○
Réutilisation

Image : Wikipedia

On créait les IHM en ensamblant des composants
Mais le développement web
n’avait rien à voir...
●

HTML/CSS/JS ne supportaient pas les composants
○
Le bloc de base était la page

Image : IBM

Les applications web étaient des ensembles de pages
Des outils comme GWT ont introduit
les composants dans les webapps
●

GWT utilise un paradigme semblable au client lourd
○
Composants, propriétés, événements...

Image : GWT Mail sample app

Les webapps GWT sont orientées composant :
Single-page apps
Aujourd’hui les single-page apps ont
le vent en poupe
●

Proposent une expérience utilisateur (UX) riche
○
Mais les construire n’est pas si simple

Image : Ken Schultz comedy juggler

HTML/CSS/JS toujours pas orientés composants
Le futur standard Web Components
●

Le W3C travaille dans un standard Web Components
○
Et on sait bien ce que ça veut dire
■

Piste : HTML5

Ils vont y travailler pendant des années,
chipotant et pinaillant sans se mettre d’accord
En attendant on fait quoi ?
●

●

On utilise des technologies qui permettent d’avoir cette
approche single-page app avec les standard d’aujourd’
hui
Beaucoup d’alternatives :
○

●

BackboneJS, EmberJS, Polymer…

Une solution simple, puissante, plébiscité et mure :

AngularJS
C’est quoi AngularJS ?
AngularJS
Les bases
Déclaratif plutôt qu’impératif
●

Deux façons de définir un IHM :
○

○

●

impératif : enchaînee programmatiquement les ordres pour
construire l’IHM
déclaratif : utiliser un langage pour décrire comment l’IHM se
présente à l’utilisateur

Le web à la base est déclaratif : HTML
○
Ses lacunes sont comblées par JS en impératif
■
○

●

Avec jQuery et d’autres, de plus en plus impératif

Difficile de faire des IHM riches en impératif

AngularJS : approche déclarative
Étendre HTML
●

Pas réinventer un langage, utiliser celui qui est déjà là : HTML
○
○

AngularJS propose un mécanisme d’extension :
■ Des nouvelles balises et attributs HTML
AngularJS va repasser sur le DOM
■ pour interpréter ces balises et ces attributs supplémentaires
■ pour les instrumenter

●

Objectif : du code HTML augmenté
○ Répondant aux attentes de la description d’une IHM riche
moderne

●

Approche différente des templates
○
○

On ne genère pas du code HTML
On écrit du HTML étendu

Angular JS is HTML enhanced for web apps!
AngularJS is HTML6
Angular is what HTML would have been had it been designed for applications
Hello Angular
Déclaration d’application AngularJS

<!doctype html>
<html ng-app>

Chargement de la bibliothèque

<head>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"
></script>
</head>
<body>
<div>
<label>Name:</label>
<input type="text" ng-model="yourName" placeholder="Enter a name here">
<hr>
<h1>Hello {{yourName}}!</h1>
</div>
</body>

Liaison dynamique (data binding)

</html>

Comment feriez-vous la même chose
avec d’autres technologies ?
Syntaxe {{ }}
●

Permet la création de templates HTML
○
Le code à l’intérieur des accolades est interprété
<!doctype html>
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"
></script>
</head>
<body>
<div>
<h1>2+2 = {{2+2}}</h1>
</div>
</body>
</html>
Data binding
●

Data binding :
○
○

●

mise à jour automatique de la vue quand le modèle change
mise à jour automatique du modèle quand la vue change

Pas besoin de manipulations du DOM
ni des événements
Let’s click
<!doctype html>
<html ng-app>

Déclaration d’application AngularJS
Chargement de la bibliothèque

<head>
<script src="http://code.angularjs.org/1.0.5/angular.min.js"></script>
</head>
<body>
<button ng-click="count = count + 1" ng-init="count=0">
Increment
</button>
count: {{count}}
</body>

Directive déclarant une expression
permettant d’incrémenter un compteur

</html>

Affichage du compteur
Les modules
●

Utilisés pour organiser les objets dans l’application
Sur app.js :

Sur index.html :

app = angular.module('myApp',
[]);

<!doctype html>
<html ng-app="myApp">
<head>
<script src="http://code.angularjs.org/1.0.5/angular.min.js"></script>
<script src="./app.js"></script>
</head>
<body>
[...]
</body>
</html>

●

Dans l’appel à angular.module() :
○

Premier argument : nom du module

○

Deuxième argument : Dépendances du module
Les contrôleurs
●

Liés à des élément de l’IHM
○
○

Contiennent les données et les fonctions
■ Avec lesquels les éléments de l’IHM interagissent
Intéragissent avec les services
■ Qui se chargent des choses comme les appels serveur

Sur app.js :

Sur index.html :

app = angular.module('myApp', []);

<!doctype html>

app.controller('mainCtrl',

<html ng-app="myApp">

function($scope){
$scope.name = 'Default Name';
});

<head>
<script src="http://code.angularjs.org/1.0.5/angular.min.js"
></script>
<script src="./app.js"></script>

$scope contient les données à
la portée de l’élément IHM
$scope.name pour la variable name
côté HTML

</head>
<body ng-app='myApp'>
<div ng-controller='mainCtrl'>
<input type='text' ng-model='name' />
<h2>{{name}}</h2>
</div>
</body>
Et maintenant ?
●

Maintenant on plonge dans le côté pratique !
Livecoding à partir du site AngularJS.org

Mais conteúdo relacionado

Mais procurados

M20480 formation-programmer-en-html5-avec-javascript-et-css3
M20480 formation-programmer-en-html5-avec-javascript-et-css3M20480 formation-programmer-en-html5-avec-javascript-et-css3
M20480 formation-programmer-en-html5-avec-javascript-et-css3
CERTyou Formation
 
Bootcamp d'Initiation à Android - 2013/11/30
Bootcamp d'Initiation à Android  - 2013/11/30Bootcamp d'Initiation à Android  - 2013/11/30
Bootcamp d'Initiation à Android - 2013/11/30
Horacio Gonzalez
 
FinistJUG - J’ai besoin d’une appli web rapidement
FinistJUG -   J’ai besoin d’une appli web rapidementFinistJUG -   J’ai besoin d’une appli web rapidement
FinistJUG - J’ai besoin d’une appli web rapidement
Horacio Gonzalez
 
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Bruno Bonnin
 

Mais procurados (20)

comprendre angularJS en 10 minutes
comprendre angularJS en 10 minutescomprendre angularJS en 10 minutes
comprendre angularJS en 10 minutes
 
Hello AngularJS - Back to the future
Hello AngularJS - Back to the futureHello AngularJS - Back to the future
Hello AngularJS - Back to the future
 
M20480 formation-programmer-en-html5-avec-javascript-et-css3
M20480 formation-programmer-en-html5-avec-javascript-et-css3M20480 formation-programmer-en-html5-avec-javascript-et-css3
M20480 formation-programmer-en-html5-avec-javascript-et-css3
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.js
 
Atelier #3 intégration html
Atelier #3 intégration htmlAtelier #3 intégration html
Atelier #3 intégration html
 
Vue.js, même un dev java peut en faire !
Vue.js, même un dev java peut en faire !Vue.js, même un dev java peut en faire !
Vue.js, même un dev java peut en faire !
 
Vue, j’avais pas vu !
Vue, j’avais pas vu !Vue, j’avais pas vu !
Vue, j’avais pas vu !
 
Comment transformer WordPress en portail de formation
Comment transformer WordPress en portail de formationComment transformer WordPress en portail de formation
Comment transformer WordPress en portail de formation
 
Bootcamp d'Initiation à Android - 2013/11/30
Bootcamp d'Initiation à Android  - 2013/11/30Bootcamp d'Initiation à Android  - 2013/11/30
Bootcamp d'Initiation à Android - 2013/11/30
 
Responsive l'indispensable révolution des outils et processus
Responsive l'indispensable révolution des outils et processusResponsive l'indispensable révolution des outils et processus
Responsive l'indispensable révolution des outils et processus
 
jQuery vs AngularJS
jQuery vs AngularJS jQuery vs AngularJS
jQuery vs AngularJS
 
FinistJUG - J’ai besoin d’une appli web rapidement
FinistJUG -   J’ai besoin d’une appli web rapidementFinistJUG -   J’ai besoin d’une appli web rapidement
FinistJUG - J’ai besoin d’une appli web rapidement
 
JavaScript Open Day - Migration Web To App
JavaScript Open Day - Migration Web To AppJavaScript Open Day - Migration Web To App
JavaScript Open Day - Migration Web To App
 
Atelier initiation au html5
Atelier initiation au html5Atelier initiation au html5
Atelier initiation au html5
 
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
 
Comparatif des frameworks js mv
Comparatif des frameworks js mvComparatif des frameworks js mv
Comparatif des frameworks js mv
 
Polymer
PolymerPolymer
Polymer
 
AngularJS
AngularJSAngularJS
AngularJS
 
JCertif Tunisie 2015 - Le Web sur Mobile, Faisons le point !
JCertif Tunisie 2015 - Le Web sur Mobile, Faisons le point !JCertif Tunisie 2015 - Le Web sur Mobile, Faisons le point !
JCertif Tunisie 2015 - Le Web sur Mobile, Faisons le point !
 
Introduction à Angular 2
Introduction à Angular 2Introduction à Angular 2
Introduction à Angular 2
 

Destaque

Le cycle de vie de la gestion des risques
Le cycle de vie de la gestion des risquesLe cycle de vie de la gestion des risques
Le cycle de vie de la gestion des risques
PMI-Montréal
 
Services web RESTful
Services web RESTfulServices web RESTful
Services web RESTful
goldoraf
 
Portrait de Petre Metu, l'ancien international roumain atteint de la maladie ...
Portrait de Petre Metu, l'ancien international roumain atteint de la maladie ...Portrait de Petre Metu, l'ancien international roumain atteint de la maladie ...
Portrait de Petre Metu, l'ancien international roumain atteint de la maladie ...
Marc De Jongy
 
Démarrer sur LinkedIn en 6 étapes
Démarrer sur LinkedIn en 6 étapesDémarrer sur LinkedIn en 6 étapes
Démarrer sur LinkedIn en 6 étapes
Stephanie Baron
 
Grilles de salaires Assurance 2015
Grilles de salaires Assurance 2015Grilles de salaires Assurance 2015
Grilles de salaires Assurance 2015
Instit
 
Genevieve Papineau PréSentatique
Genevieve Papineau PréSentatiqueGenevieve Papineau PréSentatique
Genevieve Papineau PréSentatique
geneviève papineau
 

Destaque (20)

Advanced designs for reusable lightning components
Advanced designs for reusable lightning componentsAdvanced designs for reusable lightning components
Advanced designs for reusable lightning components
 
RESTful API - Retour d'expérience
RESTful API - Retour d'expérienceRESTful API - Retour d'expérience
RESTful API - Retour d'expérience
 
Gestion des risques contractuels / HEG Genève
Gestion des risques contractuels / HEG GenèveGestion des risques contractuels / HEG Genève
Gestion des risques contractuels / HEG Genève
 
Lightning Components - Advanced Features
Lightning Components - Advanced FeaturesLightning Components - Advanced Features
Lightning Components - Advanced Features
 
Advanced Lightning Components
Advanced Lightning ComponentsAdvanced Lightning Components
Advanced Lightning Components
 
Le cycle de vie de la gestion des risques
Le cycle de vie de la gestion des risquesLe cycle de vie de la gestion des risques
Le cycle de vie de la gestion des risques
 
Best Practices for Lightning Apps
Best Practices for Lightning AppsBest Practices for Lightning Apps
Best Practices for Lightning Apps
 
Services web RESTful
Services web RESTfulServices web RESTful
Services web RESTful
 
AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)
 
Symfony with angular.pptx
Symfony with angular.pptxSymfony with angular.pptx
Symfony with angular.pptx
 
Pourquoi bloguer est incontournable pour votre PME
Pourquoi bloguer est incontournable pour votre PMEPourquoi bloguer est incontournable pour votre PME
Pourquoi bloguer est incontournable pour votre PME
 
Enfermedad celiaca: algunas respuestas, nuevas preguntas
Enfermedad celiaca: algunas respuestas, nuevas preguntasEnfermedad celiaca: algunas respuestas, nuevas preguntas
Enfermedad celiaca: algunas respuestas, nuevas preguntas
 
Formation : que sont devenus les bénéficiaires en 2013 ?
Formation : que sont devenus les bénéficiaires en 2013 ?Formation : que sont devenus les bénéficiaires en 2013 ?
Formation : que sont devenus les bénéficiaires en 2013 ?
 
Portrait de Petre Metu, l'ancien international roumain atteint de la maladie ...
Portrait de Petre Metu, l'ancien international roumain atteint de la maladie ...Portrait de Petre Metu, l'ancien international roumain atteint de la maladie ...
Portrait de Petre Metu, l'ancien international roumain atteint de la maladie ...
 
Démarrer sur LinkedIn en 6 étapes
Démarrer sur LinkedIn en 6 étapesDémarrer sur LinkedIn en 6 étapes
Démarrer sur LinkedIn en 6 étapes
 
[AJCT] Profession : Community manager du secteur public
[AJCT] Profession : Community manager du secteur public[AJCT] Profession : Community manager du secteur public
[AJCT] Profession : Community manager du secteur public
 
Datavenue objets connectés
Datavenue objets connectésDatavenue objets connectés
Datavenue objets connectés
 
Grilles de salaires Assurance 2015
Grilles de salaires Assurance 2015Grilles de salaires Assurance 2015
Grilles de salaires Assurance 2015
 
Genevieve Papineau PréSentatique
Genevieve Papineau PréSentatiqueGenevieve Papineau PréSentatique
Genevieve Papineau PréSentatique
 
Présentation Vaison-Ventoux
Présentation Vaison-VentouxPrésentation Vaison-Ventoux
Présentation Vaison-Ventoux
 

Semelhante a ENIB 2013-2014 - CAI Web #1: Côté navigateur 3/3

SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
SEO CAMP
 
Gtug2 Mobile app with web technlogy
Gtug2 Mobile app with web technlogyGtug2 Mobile app with web technlogy
Gtug2 Mobile app with web technlogy
Sacha Leprêtre
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 1Enib   cours c.a.i. web - séance #1 - html5 css3-js - 1
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
Horacio Gonzalez
 
HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)
HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)
HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)
Khaled Djebloun
 

Semelhante a ENIB 2013-2014 - CAI Web #1: Côté navigateur 3/3 (20)

Flash vs-html5-adrien-leygues-pw-2011
Flash vs-html5-adrien-leygues-pw-2011Flash vs-html5-adrien-leygues-pw-2011
Flash vs-html5-adrien-leygues-pw-2011
 
Angular développer des applications .pdf
Angular développer des applications .pdfAngular développer des applications .pdf
Angular développer des applications .pdf
 
Seocamp Bayonne - JS et SEO
Seocamp  Bayonne - JS et SEOSeocamp  Bayonne - JS et SEO
Seocamp Bayonne - JS et SEO
 
Webinar HTML5 Microsoft Intel
Webinar HTML5 Microsoft IntelWebinar HTML5 Microsoft Intel
Webinar HTML5 Microsoft Intel
 
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
 
Angluars js
Angluars jsAngluars js
Angluars js
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
 
Seo Camp'us 2018 - SEO & FRAMEWORK JAVASCRIPT - Philippe Yonnet - Directeur G...
Seo Camp'us 2018 - SEO & FRAMEWORK JAVASCRIPT - Philippe Yonnet - Directeur G...Seo Camp'us 2018 - SEO & FRAMEWORK JAVASCRIPT - Philippe Yonnet - Directeur G...
Seo Camp'us 2018 - SEO & FRAMEWORK JAVASCRIPT - Philippe Yonnet - Directeur G...
 
Introduction à Angular
Introduction à AngularIntroduction à Angular
Introduction à Angular
 
jQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-sidejQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-side
 
Gtug2 Mobile app with web technlogy
Gtug2 Mobile app with web technlogyGtug2 Mobile app with web technlogy
Gtug2 Mobile app with web technlogy
 
Méthodes agiles, frameworks javascript: optimisez votre time to market
Méthodes agiles, frameworks javascript: optimisez votre time to marketMéthodes agiles, frameworks javascript: optimisez votre time to market
Méthodes agiles, frameworks javascript: optimisez votre time to market
 
Google et le Javascript - Petit déjeuner du 29 mars 2017
Google et le Javascript - Petit déjeuner du 29 mars 2017Google et le Javascript - Petit déjeuner du 29 mars 2017
Google et le Javascript - Petit déjeuner du 29 mars 2017
 
Les nouveaux challenges techniques pour le SEO
Les nouveaux challenges techniques pour le SEOLes nouveaux challenges techniques pour le SEO
Les nouveaux challenges techniques pour le SEO
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 1Enib   cours c.a.i. web - séance #1 - html5 css3-js - 1
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
 
HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)
HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)
HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)
 
L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8
 
Programmer en html5, css 3 et java script (70 480)
Programmer en html5, css 3 et java script (70 480)Programmer en html5, css 3 et java script (70 480)
Programmer en html5, css 3 et java script (70 480)
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascript
 

Mais de Horacio Gonzalez

Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
Horacio Gonzalez
 

Mais de Horacio Gonzalez (20)

Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
 
But there is no web component for that - Web Components Remote Conference - 2...
But there is no web component for that - Web Components Remote Conference - 2...But there is no web component for that - Web Components Remote Conference - 2...
But there is no web component for that - Web Components Remote Conference - 2...
 
Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27
 Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27 Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27
Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27
 
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
 
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
 
Mixing Web Components - Best of Web Paris - 2016 06-09
Mixing Web Components - Best of Web Paris - 2016 06-09Mixing Web Components - Best of Web Paris - 2016 06-09
Mixing Web Components - Best of Web Paris - 2016 06-09
 
Polymer in the real life - Devoxx France - 2016 04-20
Polymer in the real life - Devoxx France - 2016 04-20Polymer in the real life - Devoxx France - 2016 04-20
Polymer in the real life - Devoxx France - 2016 04-20
 
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24 Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24
 
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScriptENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...
 
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQLENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
 
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQLENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
 
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScriptENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...
 
Beyond Polymer - JUG Summer Camp - 2015-09-18
Beyond Polymer - JUG Summer Camp - 2015-09-18Beyond Polymer - JUG Summer Camp - 2015-09-18
Beyond Polymer - JUG Summer Camp - 2015-09-18
 
Mixing Web Components - Paris Web Components - 2015 09-16
Mixing Web Components - Paris Web Components - 2015 09-16 Mixing Web Components - Paris Web Components - 2015 09-16
Mixing Web Components - Paris Web Components - 2015 09-16
 
Devoxx France - Web Components, Polymer et Material Design
Devoxx France -  Web Components, Polymer et Material DesignDevoxx France -  Web Components, Polymer et Material Design
Devoxx France - Web Components, Polymer et Material Design
 

ENIB 2013-2014 - CAI Web #1: Côté navigateur 3/3

  • 1. Conception d'Applications Interactives : Applications Web et JEE Séance #1 Côté navigateur HTML5 / CSS / JS / AngularJS
  • 2. Côté navigateur ● Les bases du web ○ HTTP, URL, HTML, CSS, JS, AJAX... ● HTML5 ○ HTML5, CSS3, le casse-tête des navigateurs... ○ Le web en 2013, le responsive design ● Twitter Bootstrap ○ Outils, échafaudage, LessCSS, JQuery ● Le développeur web en 2013 ○ Rôles, technologies, langages, veille technologique ● AngularJS ○ Modèle MVC côté navigateur
  • 5. Pourquoi AngularJS ? Parce qu’on veut faire des vraies applications web ● AngularJS fonctionne sur le principe MVC ○ ○ Apporte aux applications web côté client des services traditionnellement apportés côté serveur Permet des applications web plus legères et dynamiques HTML is great for declaring static documents, but it falters when we try to use it for declaring dynamic views in webapplications. AngularJS lets you extend HTML vocabulary for your application. The resulting environment is extraordinarily expressive, readable, and quick to develop.
  • 6. Mise en garde : Je suis un développeur web ● Et lorsque je raconte des histoires, je le fais du point de vue d’un développeur web Image : TylkoMrok.pl Si vous faites des applications client lourd, vous pourrez trouver que je caricature un peu
  • 7. Au début il y avait le client lourd ● Le bloc de base des IHM était le composant : ○ Encapsulation ○ Réutilisation Image : Wikipedia On créait les IHM en ensamblant des composants
  • 8. Mais le développement web n’avait rien à voir... ● HTML/CSS/JS ne supportaient pas les composants ○ Le bloc de base était la page Image : IBM Les applications web étaient des ensembles de pages
  • 9. Des outils comme GWT ont introduit les composants dans les webapps ● GWT utilise un paradigme semblable au client lourd ○ Composants, propriétés, événements... Image : GWT Mail sample app Les webapps GWT sont orientées composant : Single-page apps
  • 10. Aujourd’hui les single-page apps ont le vent en poupe ● Proposent une expérience utilisateur (UX) riche ○ Mais les construire n’est pas si simple Image : Ken Schultz comedy juggler HTML/CSS/JS toujours pas orientés composants
  • 11. Le futur standard Web Components ● Le W3C travaille dans un standard Web Components ○ Et on sait bien ce que ça veut dire ■ Piste : HTML5 Ils vont y travailler pendant des années, chipotant et pinaillant sans se mettre d’accord
  • 12. En attendant on fait quoi ? ● ● On utilise des technologies qui permettent d’avoir cette approche single-page app avec les standard d’aujourd’ hui Beaucoup d’alternatives : ○ ● BackboneJS, EmberJS, Polymer… Une solution simple, puissante, plébiscité et mure : AngularJS
  • 15. Déclaratif plutôt qu’impératif ● Deux façons de définir un IHM : ○ ○ ● impératif : enchaînee programmatiquement les ordres pour construire l’IHM déclaratif : utiliser un langage pour décrire comment l’IHM se présente à l’utilisateur Le web à la base est déclaratif : HTML ○ Ses lacunes sont comblées par JS en impératif ■ ○ ● Avec jQuery et d’autres, de plus en plus impératif Difficile de faire des IHM riches en impératif AngularJS : approche déclarative
  • 16. Étendre HTML ● Pas réinventer un langage, utiliser celui qui est déjà là : HTML ○ ○ AngularJS propose un mécanisme d’extension : ■ Des nouvelles balises et attributs HTML AngularJS va repasser sur le DOM ■ pour interpréter ces balises et ces attributs supplémentaires ■ pour les instrumenter ● Objectif : du code HTML augmenté ○ Répondant aux attentes de la description d’une IHM riche moderne ● Approche différente des templates ○ ○ On ne genère pas du code HTML On écrit du HTML étendu Angular JS is HTML enhanced for web apps! AngularJS is HTML6 Angular is what HTML would have been had it been designed for applications
  • 17. Hello Angular Déclaration d’application AngularJS <!doctype html> <html ng-app> Chargement de la bibliothèque <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js" ></script> </head> <body> <div> <label>Name:</label> <input type="text" ng-model="yourName" placeholder="Enter a name here"> <hr> <h1>Hello {{yourName}}!</h1> </div> </body> Liaison dynamique (data binding) </html> Comment feriez-vous la même chose avec d’autres technologies ?
  • 18. Syntaxe {{ }} ● Permet la création de templates HTML ○ Le code à l’intérieur des accolades est interprété <!doctype html> <html ng-app> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js" ></script> </head> <body> <div> <h1>2+2 = {{2+2}}</h1> </div> </body> </html>
  • 19. Data binding ● Data binding : ○ ○ ● mise à jour automatique de la vue quand le modèle change mise à jour automatique du modèle quand la vue change Pas besoin de manipulations du DOM ni des événements
  • 20. Let’s click <!doctype html> <html ng-app> Déclaration d’application AngularJS Chargement de la bibliothèque <head> <script src="http://code.angularjs.org/1.0.5/angular.min.js"></script> </head> <body> <button ng-click="count = count + 1" ng-init="count=0"> Increment </button> count: {{count}} </body> Directive déclarant une expression permettant d’incrémenter un compteur </html> Affichage du compteur
  • 21. Les modules ● Utilisés pour organiser les objets dans l’application Sur app.js : Sur index.html : app = angular.module('myApp', []); <!doctype html> <html ng-app="myApp"> <head> <script src="http://code.angularjs.org/1.0.5/angular.min.js"></script> <script src="./app.js"></script> </head> <body> [...] </body> </html> ● Dans l’appel à angular.module() : ○ Premier argument : nom du module ○ Deuxième argument : Dépendances du module
  • 22. Les contrôleurs ● Liés à des élément de l’IHM ○ ○ Contiennent les données et les fonctions ■ Avec lesquels les éléments de l’IHM interagissent Intéragissent avec les services ■ Qui se chargent des choses comme les appels serveur Sur app.js : Sur index.html : app = angular.module('myApp', []); <!doctype html> app.controller('mainCtrl', <html ng-app="myApp"> function($scope){ $scope.name = 'Default Name'; }); <head> <script src="http://code.angularjs.org/1.0.5/angular.min.js" ></script> <script src="./app.js"></script> $scope contient les données à la portée de l’élément IHM $scope.name pour la variable name côté HTML </head> <body ng-app='myApp'> <div ng-controller='mainCtrl'> <input type='text' ng-model='name' /> <h2>{{name}}</h2> </div> </body>
  • 23. Et maintenant ? ● Maintenant on plonge dans le côté pratique ! Livecoding à partir du site AngularJS.org