如何替换Angular材质自动完成中的setTimeout()



我试图在打开材料自动完成后使用滚动滚动到使用_setScrollTop的特定选项。当我使用setTimeout时,它工作得很好,但没有它,什么也不会发生。有没有办法避免使用超时?

下面是一个实例。

我使用@ViewChild获得自动补全:

@ViewChild('auto') testAuto: MatAutocomplete;

然后在自动补全(opened)上调用autoOpened()函数

<mat-autocomplete autoActiveFirstOption #auto="matAutocomplete" (opened)="autoOpened()">

autoOpened() {
// Not working
this.testAuto._setScrollTop(30);
// Working
// setTimeout(() => {
//   this.testAuto._setScrollTop(30);
// })

}

我认为在这种情况下没有办法避免setTimeout。因为自动补全panel在那时还不存在。参见Angular自动完成源代码:

_setScrollTop(scrollTop: number): void {
if (this.panel) {
this.panel.nativeElement.scrollTop = scrollTop;
}
}

最新更新