Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular...

43
1

Transcript of Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular...

Page 1: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

1

Page 2: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Interrogation écrite

2

Page 3: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Interrogation écrite (30s)● Qu’est ce que TypeScript ?

3

Page 4: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Interrogation écrite (1mn)● Qu’est ce qu’un module TypeScript ?● Pourquoi utilise-t-on des modules ?● Qu’est ce qu’une base de module ?

Citez en une.

4

Page 5: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Interrogation écrite (30s)● Qu’est ce que le DOM?

5

Page 6: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Interrogation écrite (30s)● Qu’est ce que GULP ?● A quoi sert GULP dans les TPs ?

6

Page 7: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Interrogation écrite (30s)● Dans un système interactif, quels sont les

deux grands blocs de code à considérer ?

7

Page 8: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Interrogation écrite (1mn)● Comment le noyau fonctionnel peut

communiquer avec le code de l’interface ?

8

Page 9: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Interrogation écrite (1mn)● Qu’est ce que l’architecture MVVM ?

9

Page 11: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Angular 2 : Le contexteAngularJS (v1) développé chez Google en 2009

● Projet annexe à l’origine (20% temps libre)○ Pour les designers web (pas vraiment les devs)○ Interagir facilement avec le back et front-end

● Projet Google Feedback (dev en GWT)○ 6 mois de développements○ 17.000 lignes de codes○ Difficile à tester, à faire évoluer

● Un des développeur fait un pari○ Google Feedback en 2 semaines avec Angular○ Pari perdu : 3 semaines. 17.000 => 1500 lignes○ Plus clair, testable, plus facile à faire évoluer○ Utilisation en interne puis en externe 11

Page 12: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Angular 2 : Le contexteAngularJS (v1)● Philosophie : Que serait HTML si il avait été conçu pour

décrire des applications ?● Cible les Single Page Application● Double way data binding, testabilité, injection de

dépendances, ...● Communauté très importante pour AngularJS

○ Cf google trends○ Cf github

● Nombreux projets réalisés○ https://www.madewithangular.com/

12

Page 13: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Angular 2 : Le contexteAngular 2 développé PAR Google

● Annoncé ~2015● Problèmes de performances, passage à l’échelle● EcmaScript -> TypeScript● Standard des web components● Angular 2.0.0 produit ~15/09/2016

13

Page 14: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Angular 2Un framework développé par Google

● Utilisation conseillé avec TypeScript mais possible en ES ou Dart● Programmation des IHM à l’aide de composants● Centré sur HTML, étend HTML avec les composants● Rendu via le client ou sur le serveur● Utilisable pour des application natives (via IONIC)● Testablitité

Un framework très riche, mais nous verrons seulement :● Les composants● Les directives● La data-binding● Les services● L’injection de dépendances

14

Page 15: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Angular 2Les constituants principaux d’un composants :

Une classe TypeScript qui gère la logique du composant

Une chaîne de caractères qui représente le template du composant

Parfois des services qui permettentd’agir sur le noyau

15

Page 16: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Angular 2

16

Component

Template HTML

Objet TypeScript

Sevice(TypeScript)

Page 17: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Angular 2 : ModuleExemple de la liste de choses à faire

● Définition d’un module contenant ○ Décoration @ngModule○ Attention ngModule ≠ module Typescript○ Les déclarations des composants

(ListeChoses, ItemChose)○ Les déclaration des services (ListeChosesService)

17

Page 18: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Angular 2 : Module

18

Page 19: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Angular 2 : ServiceExemple de la liste de choses à faire

● Définition d’un service○ Lien avec le noyau fonctionnel○ Une simple classe○ Décorateur @Injectable

(pour le cas d’une dépendance à d’autre services Ex: service Http)

19

Sevice(TypeScript)

Page 20: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Angular 2 : Service

20

Sevice(TypeScript)

Page 21: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Angular 2

21

Component

Template HTML

ComponentListeChoses

ListeChosesService

Page 22: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

ComposantDéclaration d’un composant

● Un composant va correspondre à une balise<liste-choses></liste-choses>

● Décorateur @Component● Sélecteur CSS exprimant les balises représentants le composant● Template HTML à insérer dans ces balises

22

Component

Template HTML

Objet TypeScript

@Component({selector : "liste-choses",template : htmlTemplate

})export class CompListeChoses {

}

const htmlTemplate : string = `...`;

Page 23: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

ComposantDéclaration d’un composant

● Un composant va correspondre à une balise<liste-choses></liste-choses>

● Décorateur @Component● Sélecteur CSS exprimant les balises représentants le composant● Template HTML à insérer dans ces balises

23

Component

Template HTML

Objet TypeScript

@Component({selector : "liste-choses",template : htmlTemplate

})export class CompListeChoses {

nf : ListeChoses;constructor (S: ListeChosesService) { S.getData().then(

nf => this.nf = nf );}Ajouter(texte: string) {

this.nf.Ajouter(texte); }}

const htmlTemplate : string = `...`;

Page 24: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

ComposantDéclaration d’un composant

● Un composant va correspondre à une balise<liste-choses></liste-choses>

● Décorateur @Component● Sélecteur CSS exprimant les balises représentants le composant● Template HTML à insérer dans ces balises

24

Component

Template HTML

Objet TypeScript

@Component({selector : "liste-choses",template : htmlTemplate

})export class CompListeChoses {

nf : ListeChoses;constructor (S: ListeChosesService) { S.getData().then(

nf => this.nf = nf );}Ajouter(texte: string) {

this.nf.Ajouter(texte); }}

const htmlTemplate : string = `...`;

Page 25: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

ComposantDéclaration d’un composant

● Un composant va correspondre à une balise<liste-choses></liste-choses>

● Décorateur @Component● Sélecteur CSS exprimant les balises représentants le composant● Template HTML à insérer dans ces balises

25

Component

Template HTML

Objet TypeScript

@Component({selector : "liste-choses",template : htmlTemplate

})export class CompListeChoses {

nf : ListeChoses;constructor (S: ListeChosesService) { S.getData().then(

nf => this.nf = nf );}Ajouter(texte: string) {

this.nf.Ajouter(texte); }}

const htmlTemplate : string = `<form (ngSubmit)="Ajouter(newText.value)">

<input type="text" #newText /></form>`;

Page 26: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Composant

26

Component

Template HTML

Objet TypeScript

@Component({selector : "liste-choses",template : htmlTemplate

})export class CompListeChoses {

nf : ListeChoses;constructor (S: ListeChosesService) { S.getData().then(

nf => this.nf = nf );}Ajouter(texte: string) {

this.nf.Ajouter(texte); }}

const htmlTemplate : string = `<form (ngSubmit)="Ajouter(newText.value)">

<input type="text" #newText /></form>`;

Page 27: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

ComposantDéclaration d’un composant

● Un composant va correspondre à une balise<liste-choses></liste-choses>

● Décorateur @Component● Sélecteur CSS exprimant les balises représentants le composant● Template HTML à insérer dans ces balises

27

Component

Template HTML

Objet TypeScript

@Component({selector : "liste-choses",template : htmlTemplate

})export class CompListeChoses {

nf : ListeChoses;constructor (S: ListeChosesService) { S.getData().then(

nf => this.nf = nf );}Ajouter(texte: string) {

this.nf.Ajouter(texte); }}

const htmlTemplate : string = `<form (ngSubmit)="Ajouter(newText.value)">

<input type="text" #newText /></form><ul>

<li *ngFor="let c of nf.choses"><item-chose [nf]="c"></item-chose>

</li></ul>{{nf.choses.length}} items`;

Page 28: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Faisons le point● Un module Angular ?

● Un service dans Angular ?

● Injection de dépendance ?

28

Page 29: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Faisons le point● Un composant dans Angular ?

● Data-binding ?

29

Page 30: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Angular 2 : Encore les composants

30

Page 31: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Templates et Composants● Où sont définis les directives ngSubmit, click, *ngFor, … ?

31

const htmlTemplate : string = `<form (ngSubmit)="Ajouter(newText.value)">

<input type="text" #newText /></form><ul>

<li *ngFor="let c of nf.choses"><item-chose [nf]="c"></item-chose>

</li></ul>{{nf.choses.length}} items`;

Page 32: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Templates et Composants● Où sont définis les directives ngSubmit, click, *ngFor, … ?

32

const htmlTemplate : string = `<form (ngSubmit)="Ajouter(newText.value)">

<input type="text" #newText /></form><ul>

<li *ngFor="let c of nf.choses"><item-chose [nf]="c"></item-chose>

</li></ul>{{nf.choses.length}} items`;

Page 33: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Templates et Composants● Dans quel contexte le code TypeScript est il exécuté ?

33

const htmlTemplate : string = `<form (ngSubmit)="Ajouter(newText.value)">

<input type="text" #newText /></form><ul>

<li *ngFor="let c of nf.choses"><item-chose [nf]="c"></item-chose>

</li></ul>{{nf.choses.length}} items`;

Page 34: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Templates et Composants● Dans quel contexte le code TypeScript est il exécuté ?

34

const htmlTemplate : string = `<form (ngSubmit)="Ajouter(newText.value)">

<input type="text" #newText /></form><ul>

<li *ngFor="let c of nf.choses"><item-chose [nf]="c"></item-chose>

</li></ul>{{nf.choses.length}} items`;

@Component({selector : "liste-choses",template : htmlTemplate

})export class CompListeChoses {

nf : ListeChoses;constructor (S: ListeChosesService) { S.getData().then(

nf => this.nf = nf );}Ajouter(texte: string) {

this.nf.Ajouter(texte); }}

Page 35: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Templates et Composants● Comment Angular connait ListeChosesService ?● Comment Angular connait la balise item-chose ?● Que signifie [nf] = "c" ?

35

const htmlTemplate : string = `<form (ngSubmit)="Ajouter(newText.value)">

<input type="text" #newText /></form><ul>

<li *ngFor="let c of nf.choses"><item-chose [nf]="c"></item-chose>

</li></ul>{{nf.choses.length}} items`;

@Component({selector : "liste-choses",template : htmlTemplate

})export class CompListeChoses {

nf : ListeChoses;constructor (S: ListeChosesService) { S.getData().then(

nf => this.nf = nf );}Ajouter(texte: string) {

this.nf.Ajouter(texte); }}

Page 36: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

● Que signifie @Input() nf : Chose ?

Templates et Composants

36

@Component({selector : "item-chose",template : htmlTemplate

})export class ItemChose {

@Input() nf : Chose;setFait(f: boolean) {this.nf.Fait(f);}dispose() {this.nf.dispose();}

}

const htmlTemplate : string = `<input type="checkbox"

[ngModel]="nf.fait" (ngModelChange)="setFait($event)" />

<label>{{nf.texte}}</label>

<button (onclick)="dispose()">X</button>`;

Page 37: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

● Hiérarchie de composants

Templates et Composants

37

ListeChoses

Template HTML

Objet TypeScript

ItemCHose ItemCHose

...<li *ngFor="let c of nf.choses">

<item-chose [nf]="c"></item-chose></li>...

Page 38: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

● Hiérarchie de composants● Communication entre composants

via la hiérarchie

Templates et Composants

38

ListeChoses

Template HTML

Objet TypeScript

ItemCHose ItemCHose

Page 39: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

● Hiérarchie de composants● Communication entre composants

via la hiérarchie● Exemple ngModel et ngModelChange

Templates et Composants

39

@Component({selector : "item-chose",template : htmlTemplate

})export class ItemChose {

@Input() nf : Chose;setFait(f: boolean) {this.nf.Fait(f);}dispose() {this.nf.dispose();}

}

const htmlTemplate : string = `<input type="checkbox"

[ngModel]="nf.fait" (ngModelChange)="setFait($event)" />

<label>{{nf.texte}}</label>

<button (onclick)="dispose()">X</button>`;

Page 40: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Templates et Composants● Définissons nous aussi un émetteur d’événements :

@Output() onBanco

40

Page 41: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Angular 2 : TemplateLes directives (voir documentation)

● Créer des fragments de code HTML● Injecter de l’information dans le HTML● Transmettre de l’information vers le code TypeScript

Trois types de directives● Directives structurelles (*ngIf, *ngFor, *ngSwitch, …)● Directives attributs (titre, [nf], (on-banco), …)● Directives composants (item-chose, liste-choses, …)

41

Page 42: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Questions ?

42

Page 43: Interrogation écrite - imagiihm.imag.fr/demeure/enseignements/M2 WIC/L3-06-Angular2.pdf · Angular 2 : Module Exemple de la liste de choses à faire Définition d’un module contenant

Questions ?

43