Manipulation des données avec ionic Angular.

Manipulation des données avec ionic Angular.

Le Data Binding est un élément essentiel dans les frameworks de Single Page Application. Il permet de synchroniser la vue au modèle JavaScript sous-jacent. Voici un schéma général du fonctionnement du Data Binding :

Capture d’écran 2020-12-31 à 11.51.34.png

Angular définit 4 sorte de Data binding :

  • Interpolation : ce mécanisme permet de modifier le DOM à partir du modèle, si un changement est intervenu sur une valeur de ce dernier.

  • Property Binding : ce mécanisme permet de valoriser une propriété d'un composant ou d'une directive à partir du modèle, si un changement est intervenu sur une valeur de ce dernier.

-Event Binding : ce mécanisme permet d'exécuter une fonction portée par un component suite à un évènement émis par un élément du DOM.

-Le "two-way" Data Binding : c'est une combinaison du Property Binding et du Event Binding sous une unique annotation.

Essayons de comprendre chacune de ces notions en image et en code

Interpolation {{ }}

La plus par du temps nous utiliserons lorsque nous voulons afficher une donnée provenant de notre typescript sur le DOM de notre page.

Capture d’écran 2020-12-31 à 12.08.45.png

Voici le code typescript pour l'example

import { Component } from '@angular/core';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage {

  firstName:string = "Herve Yves";

  constructor() {}

}

Voici le code html pour l'example

<ion-header [translucent]="true">
  <ion-toolbar>
    <ion-title>
      Interpolation
    </ion-title>
</ion-header>

<ion-content>
 <p>Donnée afficher par interpolation {{firstName}}</p> 
</ion-content>

Property Binding [ ]

Le property binding ou liaison par propriété est un mécanisme par lequel nous pouvons modifier la valeur de l'attribut d'un tag html ou d'un composant de manière dynamique.

Capture d’écran 2020-12-31 à 12.28.25.png

Dans l'example si dessous je vais modifier le type de l'input en fonction de la valeur de la variable zoneType

Voici le code typescript pour l'example

import { Component } from '@angular/core';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage {

  zoneType:string ="password";

  constructor() {}

}

Voici le codehtml pour l'example

<ion-header [translucent]="true">
  <ion-toolbar>
    <ion-title>
      property binding
    </ion-title>
  </ion-toolbar>
</ion-header>

<ion-content>

<div>
  <ion-input [type]="zoneType"></ion-input>
</div>

</ion-content>

SI vous changer la valeur de la variable zoneType, le type de l'input est automatiquement changé. Ici la propriété type est liée à la variable zoneType si la valeur de variable change, le type de l'input change aussi.

Event binding ( )

Lorsque nous voulons exécuter une fonction suite à un événement provoqué par un utilisateur, nous allons utiliser l'event binding. Par exemple le click sur un bouton échange une fonction.

Capture d’écran 2020-12-31 à 13.18.31.png

Le code html

<ion-header [translucent]="true">
  <ion-toolbar>
    <ion-title>
      property binding
    </ion-title>
  </ion-toolbar>
</ion-header>

<ion-content>

<div>
  <ion-button click="onShowAlert()" color="success" expand="block"></ion-button>
</div>

</ion-content>
<ion-button (click)="onShowAlert()" color="success" expand="block"></ion-button>

Nous avons ici, notre bouton portant un événement de click qui fait appel à une fonction onShowAlert(). Cette fonction sera déclenchée aussitôt que l'utilisateur click sur le bouton

Le code typescript

import { Component } from '@angular/core';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage {


  constructor() {}

  //code de notre fonction
  onShowAlert(){
      alert('Je suis une alert');
  }

}

Two way binding [( )]

Ce mécanisme permet, à partir d'une même notation, de modifier le modèle à partir du DOM et de modifier le DOM à partir du modèle. Nous allons beaucoup l'utiliser dans les formulaire pour récupérer les données entrées par l'utilisateur tout en lui affichant ce qu'il saisi.

Capture d’écran 2020-12-31 à 13.02.40.png

Le code html

<ion-header [translucent]="true">
  <ion-toolbar>
    <ion-title>
      property binding
    </ion-title>
  </ion-toolbar>
</ion-header>

<ion-content>

<div>
  <ion-input [(ngModel)]="userName" type="text" placeholder="Donner votre nom"></ion-input>
</div>

</ion-content>

Le code typescript

import { Component } from '@angular/core';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage {

  userName:string;


  constructor() {}

}

Le ngModel est une directive angular qui va faire permettre récupérer ce que utilisateur va saisir dans la zone de text et actualisera la variable userName dans le types. Grâce au [()] la mise à jour se fait dans les deux sens typescript vers html et html vers typescript car au fur et à mesure que l'utilisateur saisi, il peut aussi voir ce qu'il saisi en même temps.

Conclusion

Angular nous permet de manipuler les donnée dans ionic de manière très simple. D'une namière générale il existe plusieurs directive pour le faire. Je vous invite à tester ce que je viens de vous montrer et aussi d'explorer la documentation de angular pour en savoir plus.