On peut aussi utiliser ViewChild pour récupérer un bout de HTML endormi (un ng-template) et demander à Angular de l'afficher à la demande grâce à *ngTemplateOutlet. Idéal pour créer des modales réutilisables ou des vues dynamiques !
Le carré ci-dessous est la zone d'atterrissage (ng-container).
<ng-template #refTemplate>. Il est invisible par défaut. @ViewChild('refTemplate') myTemplate pour pêcher ce bloc de HTML. <ng-container *ngTemplateOutlet="myTemplate"> qui va dessiner le HTML pêché à cet endroit exact. import { Component, ViewChild, TemplateRef } from "@angular/core";
@Component({
selector: "app-root",
template: `
<button (click)="toggleTemplate()">Afficher le Template</button>
<!-- L'ancre où le template va atterrir -->
<ng-container *ngIf="showTemplate">
<ng-container *ngTemplateOutlet="monTemplatePêché"></ng-container>
</ng-container>
<!-- Le HTML endormi qu'on cible avec #refTemplate -->
<ng-template #refTemplate>
<p>Je suis un contenu injecté par ViewChild !</p>
</ng-template>
`
})
export class Test32Component {
// On récupère le bloc HTML "refTemplate" sous forme de "TemplateRef"
@ViewChild("refTemplate") monTemplatePêché!: TemplateRef<any>;
showTemplate = false;
toggleTemplate() {
this.showTemplate = !this.showTemplate;
}
}