Pytanie
Jaki jest najbardziej elegancki sposób uzyskania @ViewChild
po pokazaniu odpowiedniego elementu w szablonie?
Poniżej znajduje się przykład. Dostępny również Plunker .
Szablon:
<div id="layout" *ngIf="display">
<div #contentPlaceholder></div>
</div>
Składnik:
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);
}
}
Mam komponent z domyślnie ukrytą zawartością. Kiedy ktoś wywoła show()
metodę, staje się widoczna. Jednak zanim zakończy się wykrywanie zmian w Angular 2, nie mogę się do niego odwoływać viewContainerRef
. Zwykle zawijam wszystkie wymagane działania, setTimeout(()=>{},1)
jak pokazano powyżej. Czy jest bardziej poprawny sposób?
Wiem, że istnieje opcja ngAfterViewChecked
, ale powoduje zbyt wiele bezużytecznych połączeń.