Domanda
Qual è il modo più elegante per ottenere @ViewChild
dopo che è stato mostrato l'elemento corrispondente nel modello?
Di seguito è riportato un esempio. Disponibile anche Plunker .
Modello:
<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);
}
}
Ho un componente con i suoi contenuti nascosti per impostazione predefinita. Quando qualcuno chiama il show()
metodo diventa visibile. Tuttavia, prima che il rilevamento delle modifiche Angular 2 venga completato, non posso fare riferimento a viewContainerRef
. Di solito avvolgo tutte le azioni richieste setTimeout(()=>{},1)
come mostrato sopra. C'è un modo più corretto?
So che c'è un'opzione con ngAfterViewChecked
, ma causa troppe chiamate inutili.