Câu hỏi
Cách thanh lịch nhất để có được @ViewChild
sau khi yếu tố tương ứng trong mẫu được hiển thị là gì?
Dưới đây là một ví dụ. Cũng có sẵn Plunker .
Bản mẫu:
<div id="layout" *ngIf="display">
<div #contentPlaceholder></div>
</div>
Thành phần:
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);
}
}
Tôi có một thành phần với nội dung của nó được ẩn theo mặc định. Khi ai đó gọi show()
phương thức, nó sẽ hiển thị. Tuy nhiên, trước khi phát hiện thay đổi Angular 2 hoàn tất, tôi không thể tham khảo viewContainerRef
. Tôi thường gói tất cả các hành động cần thiết vào setTimeout(()=>{},1)
như hình trên. Có cách nào đúng hơn không?
Tôi biết có một tùy chọn với ngAfterViewChecked
, nhưng nó gây ra quá nhiều cuộc gọi vô dụng.