Питання
Який найелегантніший спосіб отримати @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
, але це викликає занадто багато марних дзвінків.