问题
在显示模板中的相应元素后,获得@ViewChild
的最优雅方式是什么?
下面是一个示例.也有Plunker个可用.
Component.template.html:
<div id="layout" *ngIf="display">
<div #contentPlaceholder></div>
</div>
Component.component.ts:
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
个,但它会导致太多无用的电话.