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.