Вопрос
Какой самый элегантный способ получить @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
, но она вызывает слишком много бесполезных звонков.