Pertanyaan
Apa cara paling elegan untuk mendapatkan @ViewChild
setelah elemen yang sesuai dalam template ditampilkan?
Di bawah ini adalah contohnya. Juga Plunker tersedia.
Templat:
<div id="layout" *ngIf="display">
<div #contentPlaceholder></div>
</div>
Komponen:
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);
}
}
Saya memiliki komponen dengan isinya disembunyikan secara default. Ketika seseorang memanggil show()
metode itu menjadi terlihat. Namun, sebelum deteksi perubahan Angular 2 selesai, saya tidak bisa merujuk viewContainerRef
. Saya biasanya memasukkan semua tindakan yang diperlukan setTimeout(()=>{},1)
seperti yang ditunjukkan di atas. Apakah ada cara yang lebih benar?
Saya tahu ada opsi dengan ngAfterViewChecked
, tetapi itu menyebabkan terlalu banyak panggilan tidak berguna.