javascript - 如何访问 ng-template 中的元素? ( Angular 5)

标签 javascript angular typescript ng-bootstrap angular-template

我使用 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>

它有效,但我想在用户单击按钮并打开对话框时导航到当前月份。为此,我需要在 ngb-datepicker 元素上调用 .navigateTo()

不幸的是@ViewChild('popDatePicker')ngOnInit上没有定义,所以我在按钮的onclick方法中试了一下:

 (click)="popDatePicker.navigateTo()"

但是我得到这个错误:

Cannot read property 'navigateTo' of undefined

如何解决这个错误?当模板被实例化时,我必须以某种方式调用一个函数,但我不知道如何调用。


编辑

我可以从 click 事件处理程序中的 setTimeout 调用中找到该元素,但这似乎不是解决问题的优雅方法。

最佳答案

我可以猜到当您单击按钮时弹出窗口尚未呈现。尝试以下操作:

在标记中:

(click)="btnClick()"

在组件中:

constructor(private cd: ChangeDetectorRef) {}

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

关于javascript - 如何访问 ng-template 中的元素? ( Angular 5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52309745/

相关文章:

javascript - 从已使用 AJAX 更新的列表框中获取最新值

javascript - Angular2 RxJS 得到 'Observable_1.Observable.fromEvent is not a function' 错误

angular7 aot : Expression form not supported

javascript - bootstrap-wysiwyg 在 IE 中不起作用

javascript - 功能性 react 组件上的窗口对象出现问题

angular - ngx-datatable - 编辑单元格并弹出一个新按钮来保存更改

javascript - 从 Http (ng2) 升级到 HttpClient (ng6) 后登录请求的未定义响应

typescript :不能在模块外使用导入语句

javascript - 合并 CanvasRenderingContext2D 中的多个路径以作为一组进行填充和描边

javascript - wkhtmltopdf 获取正文 html 中的页数