Aller au contenu

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 }}.