ng-template
Le site <ng-template>
est un élément Angular permettant d'effectuer un rendu HTML. Il n'est jamais affiché directement. A utiliser pour les directives structurelles telles que : ngIf, ngFor, ngSwitch,
Exemple :
<div *ngIf="hero" class="name">{{hero.name}}</div>
Angular traduit l'attribut *ngIf en un attribut <ng-template>
enveloppé autour de l'élément hôte, comme ceci.
<ng-template [ngIf]="hero">
<div class="name">{{hero.name}}</div>
</ng-template>
ng-container
À utiliser comme élément de regroupement lorsqu'il n'y a pas d'élément hôte approprié.
Exemple :
<div>
Pick your favorite hero
(<label><input type="checkbox" checked (change)="showSad = !showSad">show sad</label>)
</div>
<select [(ngModel)]="hero">
<span *ngFor="let h of heroes">
<span *ngIf="showSad || h.emotion !== 'sad'">
<option [ngValue]="h">{{h.name}} ({{h.emotion}})</option>
</span>
</span>
</select>
Cela ne fonctionnera pas. Car certains éléments HTML exigent que tous les enfants immédiats soient d'un type spécifique. Par exemple, l'élément <select>
nécessite des enfants. Vous ne pouvez pas envelopper les options dans une conditionnelle ou un <span>
.
Essayez ceci :
<div>
Pick your favorite hero
(<label><input type="checkbox" checked (change)="showSad = !showSad">show sad</label>)
</div>
<select [(ngModel)]="hero">
<ng-container *ngFor="let h of heroes">
<ng-container *ngIf="showSad || h.emotion !== 'sad'">
<option [ngValue]="h">{{h.name}} ({{h.emotion}})</option>
</ng-container>
</ng-container>
</select>
Ça va marcher.
Plus d'informations : Directive structurelle Angular