C'est quoi le Data binding ?
Le data binding permet de lire et/ou synchroniser les propriétés et méthodes de vos composants directement dans leurs templates.
Il existe 4 types de data binding dans Angular.
Interpolation
Lâinterpolation permet dâafficher une valeur dans le template. Pour cela, on utilise la syntaxe {{ }}
.
@Component({
template: `
<p>Mon nom est {{ name }}</p>
<p>{{ copyright }}</p>
`
})
export class AppComponent {
name = 'Emeline';
copyright = `Bonjour Angular, ${new Date().getFullYear()}`
}
Property binding
Le property binding permet de lier une propriĂ©tĂ© dâun Ă©lĂ©ment HTML Ă une valeur dans le composant. Pour cela, on utilise la syntaxe [ ]
.
@Component({
template: `
<button [disabled]="isDisabled">Mon bouton</button>
<img [src]="image" />
`
})
export class AppComponent {
isDisabled = true;
image = 'https://angular.io/assets/images/logos/angular/angular.png';
}
Event binding
Lâevent binding permet de lier un Ă©vĂ©nement dâun Ă©lĂ©ment HTML Ă une mĂ©thode dans le composant. Pour cela, on utilise la syntaxe ( )
.
Il existe beaucoup dâĂ©vĂ©nements comme click
, change
, input
, keyup
, keydown
, mouseover
, mouseout
, focus
, blur
, etc.
@Component({
template: `
<button (click)="alert('Bonjour Angular!')">Alert</button>
`
})
export class AppComponent {
alert(message: string) {
window.alert(message);
}
}
Certains évÚnements exposent des propriétés comme $event
qui contient des informations sur lâĂ©vĂ©nement.
<input type="text" (input)="onInput($event)" /> <!-- $event contient la valeur de l'input -->
<button>Click me!</button (click)="onClick($event)" /> // <!-- $event contient l'objet MouseEvent -->
A noter que vous pouvez créer des évÚnements personnalisés pour vos composants avec @Output()
.
Two-way binding
Le two-way binding est une fonctionnalitĂ© qui crĂ©e une connexion bidirectionnelle entre un Ă©lĂ©ment HTML et un composant. Cela signifie que toute modification apportĂ©e Ă lâĂ©lĂ©ment est reflĂ©tĂ©e dans le composant, et vice-versa. Pour rĂ©aliser cette liaison, on utilise la syntaxe [( )]
.
@Component({
template: `
<input type="text" [(ngModel)]="name" />
<p>Mon nom est {{ name }}</p>
`
})
export class AppComponent {
name = 'Emeline';
}
Ici, si lâutilisateur Ă©crit dans lâinput, cela modifiera la propriĂ©tĂ© name
et ce changement sera reflété automatiquement dans {{ name }}
.