Voici le code que j'essaye de mettre au travail (angular 5):
import { Component, ViewChild, TemplateRef, ViewContainerRef } from '@angular/core';
@Component({
selector: 'vcr',
template: `
<template #tpl>
<h1>ViewContainerRef</h1>
</template>
<div>Some element</div>
<div #container></div>
`,
})
export class VcrCmp {
@ViewChild('container', { read: ViewContainerRef }) _vcr;
@ViewChild('tpl') tpl: TemplateRef<any>;
constructor(
private viewContainerRef: ViewContainerRef
) {
}
ngAfterViewInit() {
console.info(this.viewContainerRef);
console.info(this._vcr);
this._vcr.createEmbeddedView(this.tpl);
this.viewContainerRef.createEmbeddedView(this.tpl);
}
}
Le problème est que j'ai ceci (templateRef.createEmbeddedView is not a function
) erreur et ne comprends pas vraiment pourquoi.
Ce code est basé sur cet exemple https://netbasal.com/angular-2-understanding-viewcontainerref-acc183f3b682 donc je suppose que cela devrait fonctionner.
Qu'est-ce que je fais mal?
Selon angular 5 changelog:
L'option enableLegacyTemplate du compilateur est maintenant désactivée par défaut car l'élément est obsolète depuis la v4. Utilisez
<ng-template>
À la place.
Donc, vous devriez utiliser ng-template
Au lieu de template
:
<ng-template #tpl>
<h1>ViewContainerRef</h1>
</ng-template>
ou définissez enableLegacyTemplate
sur false
:
platformBrowserDynamic().bootstrapModule(AppModule, { enableLegacyTemplate: true })
Mais tu devrais savoir que
L'option enableLegacyTemplate et l'élément <template>
Seront tous deux supprimés dans Angular v6.
Dans mon cas, l'erreur était due à mon oubli * (astérisque) avant ngTemplateOutlet
Lorsque vous référencez dans la * ngIf, la clause else ne peut pas être un composant quelconque, mais ce doit être un ng-template.
Pour, par exemple,
dans un composant où vous avez un code source similaire à ceci:
<div *ngIf="myCondition ; else elseSection"> <!-- ... --> </div> <div #elseSection> <!-- ... --> </div>
Le code source résultant devrait ressembler à ceci:
<div *ngIf="myCondition ; else elseSection"> <!-- ... --> </div> <ng-template #elseSection> <!-- ... --> </ng-template>