Question
Quelle est la façon la plus élégante d'obtenir @ViewChild
après que l'élément correspondant dans le modèle a été affiché?
Voici un exemple. Plunker également disponible.
Modèle:
<div id="layout" *ngIf="display">
<div #contentPlaceholder></div>
</div>
Composant:
export class AppComponent {
display = false;
@ViewChild('contentPlaceholder', {read: ViewContainerRef}) viewContainerRef;
show() {
this.display = true;
console.log(this.viewContainerRef); // undefined
setTimeout(()=> {
console.log(this.viewContainerRef); // OK
}, 1);
}
}
J'ai un composant avec son contenu caché par défaut. Quand quelqu'un appelle la show()
méthode, elle devient visible. Cependant, avant la fin de la détection du changement Angular 2, je ne peux pas faire référence à viewContainerRef
. J'encapsule généralement toutes les actions requises setTimeout(()=>{},1)
comme indiqué ci-dessus. Y a-t-il une manière plus correcte?
Je sais qu'il y a une option avec ngAfterViewChecked
, mais cela provoque trop d'appels inutiles.