Domanda
Qual è il modo più elegante per ottenere @ViewChilddopo 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.