Soru
@ViewChildŞablondaki ilgili öğenin gösterilmesinden sonra elde etmenin en zarif yolu nedir ?
Aşağıda bir örnek verilmiştir. Ayrıca Plunker mevcuttur.
Şablon:
<div id="layout" *ngIf="display">
<div #contentPlaceholder></div>
</div>
Bileşen:
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);
}
}
İçeriği varsayılan olarak gizli olan bir bileşenim var. Birisi show()yöntemi çağırdığında görünür hale gelir. Ancak, Açısal 2 değişiklik tespiti tamamlanmadan referans veremiyorum viewContainerRef. Genellikle tüm gerekli işlemleri setTimeout(()=>{},1)yukarıda gösterildiği gibi sararım. Daha doğru bir yol var mı?
İle bir seçenek olduğunu biliyorum ngAfterViewChecked, ama çok işe yaramaz çağrılara neden olur.