Как получить доступ к элементу внутри ng-шаблона? (Угловой 5) - PullRequest
0 голосов
/ 13 сентября 2018

Я использую библиотеку ngBootstrap , чтобы создать средство выбора даты в моей программе.HTML-файл выглядит следующим образом:

<button class="btn btn-secondary" [ngbPopover]="popDate" popoverTitle="Date" placement="bottom">
    {{ my_date_string }}
</button>

<ng-template #popDate>
    <ngb-datepicker #popDatePicker [(ngModel)]="my_date_struct"></ngb-datepicker>
</ng-template>

Он работает, но я бы хотел перейти к текущему месяцу, когда пользователь нажимает кнопку и открывает диалоговое окно.Для этого мне нужно вызвать .navigateTo() для элемента ngb-datepicker.

К сожалению @ViewChild('popDatePicker') не определено для ngOnInit, поэтому я попробовал это в методе onclick кнопки:

 (click)="popDatePicker.navigateTo()"

Но я получаю эту ошибку:

Cannot read property 'navigateTo' of undefined

Как можно решить эту ошибку?Мне нужно как-то вызвать функцию, когда создается экземпляр шаблона, но я понятия не имею, как.


Редактировать

Я могу найти элемент изsetTimeout вызовите обработчик событий click, но это не выглядит элегантным способом решения проблемы.

1 Ответ

0 голосов
/ 13 сентября 2018

Я могу догадаться, что всплывающее окно еще не отображается при нажатии кнопки. Попробуйте следующее:

В разметке:

(click)="btnClick()"

В компоненте:

constructor(private cd: ChangeDetectorRef) {}

btnClick(): void {
   setTimeout(() => { 
     this.popDatePicker.navigateTo();
     this.cd.markForCheck();
   });
}
...