ng-template
Le <ng-template>
est un élément angulaire pour le rendu HTML. Il n'est jamais affiché directement. À 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 <ng-template>
élément, enroulé 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. Parce que certains éléments HTML exigent que tous les enfants immédiats soient d'un type spécifique. Par exemple, l' <select>
élément nécessite des enfants. Vous ne pouvez pas envelopper les options dans un conditionnel ou un fichier <span>
.
Essaye ça :
<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>
Cela fonctionnera.
Plus d'informations: Directive sur les structures angulaires
@Input()
s.*
est bien sûr plus pratique. Mais vous avez raison, a<ng-container>
été introduit parce que les différences de syntaxe ont causé une certaine confusion.