Enhance Web Development
Angular 2
Les concepts fondamentaux
Les concepts fondamentaux
- Les classes
- Les composants
- Les imports/exports
- Les décorateurs
- L'amélioration (composition)
- La répétition
- Le cycle de vie Angular 2
Les composants
- Créer un composant (class ES6)
- Les attributs & méthodes de la classe seront accessible dans le template associé
export class UsersComponent() { }
export class AboutComponent implements OnInit {
title: string = 'About Page'
body: string = 'This is the about page body'
message: string
constructor(public _stateService: StateService) { }
ngOnInit() {
this.message = this._stateService.getMessage()
}
updateMessage(m: string): void {
this._stateService.setMessage(m)
}
}
Composant
Import / export
- Importer les dépendances angular
- Importer les dépendances 3rd party
- Importer les dépendances du projet
- Très utile d'ordonner ses imports pour améliorer la lecture du code source
import (Component) from 'angular/core';
export class UsersComponent() { }
Import / export
Decorate
- Pour transformer une classes ES6 en un artefact angular 2, on la décore (annotate) avec les metadata spécifiques Angular 2.
- On utilise la syntaxe @<decorator>
- Les plus utilisés sont : @Component, @Injectable, @Directive et @Pipe
- On peut également décorer les propriétés d'une classe : @Input et @Output
import (Component) from 'angular/core';
@Component({
selector: 'users',
templateUrl: './users.component.html'
})
export class UsersComponent() {
@Input() name: String;
}
Le décorateur @Component
Ameliorer (Enhance)
- L'idée est d'écrire une version minimale du composant puis de l'améliorer de façon itérative
- Améliorer par composition = ajout de méthodes, d'input, d'output, injecter des services, etc.
- un composant = simple et spécifique
import (Component) from 'angular/core';
export interface User {
firstname: string
lastname: string
}
@Component({
selector: 'users',
templateUrl: './users.component.html'
})
export class UsersComponent() {
users: User[]
defaultUser: User = {
firstname: 'Default Firstname',
lastname: 'Default Lastname',
}
constructor(
private _userService: UserService
) {
updateUser(index:number, user: User) {
this.users = this._userService.update(index, user)
}
}
Ajout de fonctionnalité à notre composant
Répéter
- La plateforme Angular 2 permet de créer très facilement un composant
- Découper un composant en plusieurs composant est très vivement recommandé
import (Component) from 'angular/core';
import {UserComponent} from './user/user.component'
export interface User {
firstname: string
lastname: string
}
@Component({
selector: 'users',
templateUrl: './users.component.html',
directives: [UserComponent]
})
export class UsersComponent() {
users: User[]
defaultUser: User = {
firstname: 'Default Firstname',
lastname: 'Default Lastname',
}
constructor(
private _userService: UserService
) {
updateUser(index:number, user: User) {
this.users = this._userService.update(index, user)
}
}
Inclusion d'un sous-composant
Cycle de vie Angular 2
- Ils permettent d'exécuter de la logique personnalisé à chaque étape de vie d'un composant
- Pourquoi ? Les données ne sont pas toujours disponible immédiatement dans le constructeur
- Utilisable seulement avec TypeScript
- Les interfaces des hooks sont optionnels (comme tout typage) mais fortement recommandé
- Hooks = methodes de notre composant
Les hooks
- ngOnInit - Appeler directement après la mise en place du binding
- ngOnChanges(changes) - Appeler quand un Input change
- ngDoCheck - Permet d'effectuer du code personnalisé
- ngAfterContentInit - Après que le contenu soit initialisé
- ngAfterContentChecked - Après chaque vérification du composant par Angular
- ngAfterViewInit - Après que la vue soit initialisé
- ngAfterViewChecked - Après vérification de la vue
- ngOnDestroy - Juste avant la suppression de ce composant
Liste des hooks
import (Component, OnInit) from 'angular/core';
import {UserComponent} from './user/user.component'
@Component({
selector: 'users',
templateUrl: './users.component.html',
directives: [UserComponent]
})
export class UsersComponent implements OnInit () {
users: User[]
defaultUser: User = {
firstname: 'Default Firstname',
lastname: 'Default Lastname',
}
constructor(
private _userService: UserService
) {
ngOnInit() {
this.users = this._userService.get()
}
updateUser(index:number, user: User) {
this.users = this._userService.update(index, user)
}
}
onInit hook
Demo time !
Défi
- Créer la structure de fichier pour un composant widget
- Créer la classe ES6 widget
- Importer les dépendances
- Décorer la classe widget pour utiliser un template & un sélecteur
- Afficher le composant widget dans le composant home
- BONUS : Créer une simple route pour se rendre sur le composant widget
Linalis - 05 - Les concepts fondamentaux
By Benjamin LONGEARET
Linalis - 05 - Les concepts fondamentaux
- 875