คำถาม
วิธีที่ดีที่สุดในการรับ@ViewChild
หลังจากองค์ประกอบที่เกี่ยวข้องในเทมเพลตถูกแสดงคืออะไร
ด้านล่างเป็นตัวอย่าง นอกจากนี้ยังมีPlunker
แม่แบบ:
<div id="layout" *ngIf="display">
<div #contentPlaceholder></div>
</div>
ส่วนประกอบคือ:
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);
}
}
ฉันมีส่วนประกอบที่ซ่อนเนื้อหาตามค่าเริ่มต้น เมื่อใครบางคนเรียกshow()
วิธีการมันจะมองเห็นได้ อย่างไรก็ตามก่อนการตรวจจับการเปลี่ยนแปลง Angular 2 เสร็จสมบูรณ์ฉันไม่สามารถอ้างอิงviewContainerRef
ได้ ฉันมักจะห่อการกระทำที่จำเป็นทั้งหมดไว้ในsetTimeout(()=>{},1)
ที่แสดงข้างต้น มีวิธีที่ถูกต้องมากขึ้นหรือไม่?
ฉันรู้ว่ามีตัวเลือกด้วยngAfterViewChecked
แต่มันทำให้เกิดการโทรที่ไร้ประโยชน์มากเกินไป