首页 > 解决方案 > 如何在 Angular Material Autocomplete 中替换 setTimeout()

问题描述

我在打开 Material Autocomplete 后尝试使用滚动来滚动到使用_setScrollTop. 当我使用它时它工作正常,setTimeout但没有它什么都不会发生。有没有办法避免使用超时?

是一个活生生的例子。

我正在使用@ViewChild自动完成功能:

@ViewChild('auto') testAuto: MatAutocomplete;

autoOpened()然后在 Autocomplete 上调用函数(opened)

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

autoOpened() {

  // Not working
  this.testAuto._setScrollTop(30);

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

标签: javascriptangular

解决方案


我认为setTimeout在这种情况下没有办法避免。因为panel在那一刻还不存在自动完成功能。请参阅Angular 自动完成来源

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

推荐阅读