Pregunta
¿Cuál es la forma más elegante de obtener @ViewChild
después de que se muestre el elemento correspondiente en la plantilla?
A continuación se muestra un ejemplo. También Plunker disponible.
Modelo:
<div id="layout" *ngIf="display">
<div #contentPlaceholder></div>
</div>
Componente:
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);
}
}
Tengo un componente con su contenido oculto por defecto. Cuando alguien llama al show()
método, se vuelve visible. Sin embargo, antes de que se complete la detección de cambios en Angular 2, no puedo hacer referencia a ellos viewContainerRef
. Normalmente envuelvo todas las acciones requeridas setTimeout(()=>{},1)
como se muestra arriba. ¿Hay una forma más correcta?
Sé que hay una opción con ngAfterViewChecked
, pero causa demasiadas llamadas inútiles.