Questão
Qual é a maneira mais elegante de obter @ViewChild
depois que o elemento correspondente no modelo foi mostrado?
Abaixo está um exemplo. Também Plunker disponível.
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);
}
}
Eu tenho um componente com seu conteúdo oculto por padrão. Quando alguém chama o show()
método, ele se torna visível. No entanto, antes que a detecção de alteração do Angular 2 seja concluída, não posso fazer referência a viewContainerRef
. Normalmente, envolvo todas as ações necessárias, setTimeout(()=>{},1)
como mostrado acima. Existe uma maneira mais correta?
Eu sei que existe uma opção com ngAfterViewChecked
, mas causa muitas chamadas inúteis.