Angular: Directives

folder Projet: angularApp
ce sont des attributs du component qui permet de manipuler les élements du compopnents comme: modifier le style,afficher un contenu ,des conditions,des boucles...

Voici quelques exemples de directives dans Angular :

  1. NgIf : permet de conditionner l'affichage d'un élément DOM en fonction d'une expression booléenne. Par exemple :
<div *ngIf="condition">Contenu à afficher si la condition est vraie</div>
  1. NgFor : permet de créer une liste d'éléments DOM à partir d'un tableau ou d'une collection. Par exemple :
<ul> <li *ngFor="let item of items">{{ item }}</li> </ul>
  1. NgClass : permet de modifier la classe CSS d'un élément DOM en fonction d'une expression booléenne ou d'une variable. Par exemple :
css
<div [ngClass]="{'active': isActive, 'disabled': isDisabled}">Contenu de la div</div>
  1. NgStyle : permet de modifier le style CSS d'un élément DOM en fonction d'une expression ou d'une variable. Par exemple :
css
<div [ngStyle]="{'color': textColor, 'font-size': textSize + 'px'}">Contenu de la div</div>
  1. NgSwitch : permet de conditionner l'affichage d'un élément DOM en fonction de plusieurs valeurs possibles. Par exemple :
<div [ngSwitch]="condition"> <p *ngSwitchCase="'value1'">Contenu à afficher si condition vaut 'value1'</p> <p *ngSwitchCase="'value2'">Contenu à afficher si condition vaut 'value2'</p> <p *ngSwitchDefault>Contenu à afficher si condition ne correspond à aucune valeur</p> </div>

1.if, for, switch

*ngIf

Permet de faire un if dans la partie View

Voici un exemple simple d'utilisation de la directive *ngIf dans Angular :

<div *ngIf="isLoggedin"> <p>Bienvenue, {{ username }} !</p> <button (click)="logout()">Déconnexion</button> </div>

Dans cet exemple, la directive *ngIf est appliquée à un élément div. Le contenu de cet élément ne sera affiché que si la variable isLoggedin est évaluée à true. Si la variable est évaluée à false, l'élément div et son contenu seront supprimés du DOM.

La variable isLoggedin peut être définie dans le composant TypeScript correspondant, par exemple :

typescript
export class MonComposant implements OnInit { isLoggedin = true; username = 'John Doe'; ngOnInit() { // Vérifie si l'utilisateur est connecté this.isLoggedin = authService.isLoggedIn(); } logout() { // Déconnecte l'utilisateur authService.logout(); this.isLoggedin = false; } }

Dans cet exemple, la variable isLoggedin est initialisée à false et est modifiée dans la méthode ngOnInit() en fonction de l'état de connexion de l'utilisateur. Lorsque l'utilisateur clique sur le bouton Déconnexion, la méthode logout() est appelée pour déconnecter l'utilisateur et modifier la valeur de la variable isLoggedin à false. Cela entraîne la suppression de l'élément div et de son contenu du DOM.



Exemple2


app.component.html

<router-outlet>
<div *ngIf="rep">
<h1>Bien reponse is True</h1>
</div>
<div *ngIf="n==12">
<h1>Ok n=12</h1>
</div>
</router-outlet>

app.component.ts

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

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
rep:boolean=false;
n:number=12;


}



*ngFor

Permet de faire une boucle for dans la partie View

Le *ngFor est une directive structurelle d'Angular qui permet d'itérer sur une collection et de créer des éléments d'interface utilisateur pour chaque élément de la collection. Voici quelques exemples de *ngFor dans Angular :

  1. Itérer sur un tableau de chaînes de caractères :

    html
    <ul> <li *ngFor="let fruit of fruits">{{ fruit }}</li> </ul>

    Dans cet exemple, la directive *ngFor est utilisée pour itérer sur le tableau de chaînes de caractères "fruits" et créer un élément li pour chaque élément du tableau. Le fruit est une variable qui est utilisée pour faire référence à chaque élément du tableau.

  2. Itérer sur un tableau d'objets :

    html
    <ul> <li *ngFor="let person of people">{{ person.name }} - {{ person.age }}</li> </ul>

    Dans cet exemple, la directive *ngFor est utilisée pour itérer sur le tableau d'objets "people" et créer un élément li pour chaque objet dans le tableau. La variable person est utilisée pour faire référence à chaque objet du tableau et afficher les propriétés de l'objet, comme le nom et l'âge.

  3. Utiliser l'index de l'itération :

    html
    <ul> <li *ngFor="let fruit of fruits; let i = index">{{ i + 1 }} - {{ fruit }}</li> </ul>

    Dans cet exemple, la directive *ngFor est utilisée pour itérer sur le tableau de chaînes de caractères "fruits" et créer un élément li pour chaque élément du tableau. La variable i est utilisée pour faire référence à l'index de chaque élément du tableau, et l'index est utilisé pour afficher le numéro de chaque élément.

  4. Itérer sur un objet :

    html
    <ul> <li *ngFor="let value of myObject | keyvalue">{{ value.key }}: {{ value.value }}</li> </ul>

    Dans cet exemple, la directive *ngFor est utilisée pour itérer sur un objet et créer un élément li pour chaque paire clé-valeur de l'objet. La variable value est utilisée pour faire référence à chaque paire clé-valeur de l'objet, et la pipe keyvalue est utilisée pour transformer l'objet en un tableau de paires clé-valeur.

app.component.html

<router-outlet>
<ul>
<li *ngFor="let ville of ['casabanca', 'Rabat', 'Tanger','Dakhla']; let i=index">
Ville {{ i + 1 }}: {{ ville }}
</li>
</ul>
</router-outlet>

Exemple 2:Avec un tableau d'objet

Remarque: afin de rendre nos interface plus styled on peut installer boostrap :
1.installer bootsrap
Command:
npm install bootstrap --save
2.Ajouter bootsrap dans le fichiers de dépendances angular.json
"styles": [ "src/styles.css", "./node_modules/bootstrap/dist/css/bootstrap.min.css" ],
-Maintenant toutes les components du projet peuvent utilser les classes de bootsrap

app.component.html

<router-outlet>
<div class="container">
<table class="table table-striped">
<tr>
<th>id</th>
<th>Nom</th>
<th>Prénom</th>
<th>Email</th>
</tr>
<tr *ngFor="let etudiant of etudiants; let i=index">
<td>{{i+1}}</td>
<td>{{etudiant.nom}}</td>
<td>{{etudiant.prenom}}</td>
<td>{{etudiant.email}}</td>
</tr>
</table>
</div>
</router-outlet>

app.component.ts

import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
etudiants = [
{"nom": "nom1", "prenom": "prenom1","email": "email1@"},
{"nom": "nom2", "prenom": "prenom2","email": "email2@"},
{"nom": "nom3", "prenom": "prenom3","email": "email3@"}
];

}


*ngSwitchCase

Permet de faire une switch dans la partie View

app.component.ts

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

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
etudiants = [
{"nom": "nom1", "prenom": "prenom1","email": "email1@","admis":true},
{"nom": "nom2", "prenom": "prenom2","email": "email2@","admis":false},
{"nom": "nom3", "prenom": "prenom3","email": "email3@","admis":"unkown"}
];
}


app.component.html

<router-outlet>
<div class="container">
<table class="table table-striped">
<tr>
<th>id</th>
<th>Nom</th>
<th>Prénom</th>
<th>Email</th>
</tr>
<tr *ngFor="let etudiant of etudiants; let i=index">
<td>{{i+1}}</td>
<td>{{etudiant.nom}}</td>
<td>{{etudiant.prenom}}</td>
<td>{{etudiant.email}}</td>
<td [ngSwitch]=etudiant.admis>
<span *ngSwitchCase=true>Green</span>
<span *ngSwitchCase=false>Red</span>
<span *ngSwitchDefault>Autre</span>
</td>
</tr>
</table>
</div>
</router-outlet>


NgPlural

NgPlural permet d'afficher ou supprimer une base DOM selon la valeur de ses Children ngPluralCase la valeur de ngPluralCase doit être number

app.component.ts

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

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
user={
age:17,
genre:0,//pour F:1 et M:0
choix:2
}
}




app.component.html

<h3>Genre</h3>
<div [ngPlural]="user.genre">
<ng-template ngPluralCase="=0"><div>Content for Male Client</div></ng-template>
<ng-template ngPluralCase="=1"><div>Content for Female Client</div></ng-template>
<ng-template ngPluralCase="other"><div>Content for other Client</div></ng-template>
</div>
<h3>Age</h3>
<div [ngPlural]="user.age">
<ng-template ngPluralCase=">15"><div>Content for Client age >15</div></ng-template>
<ng-template ngPluralCase="=18"><div>Content for Male Client age=18</div></ng-template>
<ng-template ngPluralCase="other"><div>Content for other Client</div></ng-template>
</div>
<h3>Choix</h3>
<div [ngPlural]="user.choix">
<ng-template ngPluralCase="=1"><div>Content for choix 1</div></ng-template>
<ng-template ngPluralCase="=2"><div>Content for choix 2</div></ng-template>
<ng-template ngPluralCase="other"><div>Content for other choix </div></ng-template>
</div>