【发布时间】:2017-01-14 23:20:11
【问题描述】:
问题
在模板中显示相应元素后获取@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 有一个选项,但它会导致太多无用的调用。
ANSWER (Plunker)
【问题讨论】:
-
您是否尝试使用 [hidden] 属性而不是 *ngIf?对于类似的情况,它对我有用。
标签: angular angular2-changedetection viewchild