如何在 Angular 7 中设置 CdkVirtualScrollViewport 的初始索引(位置)

Dal*_*lie 7 lifecycle angular virtualscroll angular-cdk angular7

我需要的初始位置cdk-virtual-scroll-viewport不是列表的第一个元素/项目。

现在我找到了scrollToIndexscrollTo方法,但我只能在 中使用它时才能让它们工作ngAfterViewChecked,这感觉不对。

  1. 有人可以确认使用这些方法ngAfterViewChecked是正确的做事方式吗?
  2. 如果没有,请展示替代方法/技术?

  @ViewChild(CdkVirtualScrollViewport) cdkVirtualScrollViewport: CdkVirtualScrollViewport;
  numbers: number[] = [];

  constructor() {
    for (let index = 0; index < 10000; index++) {
      this.numbers.push(index);
    }
  }

  ngAfterViewChecked() {
    this.cdkVirtualScrollViewport.scrollToIndex(2000);
  }
Run Code Online (Sandbox Code Playgroud)
  <ul class="list">
    <cdk-virtual-scroll-viewport style="height:264px" itemSize="88">
      <ng-container *cdkVirtualFor="let n of numbers">
        <li style="height:88px">{{ n }}</li>
      </ng-container>
    </cdk-virtual-scroll-viewport>
  </ul>
Run Code Online (Sandbox Code Playgroud)

小智 1

我有同样的问题,我有一个不太优雅的解决方案

contentCheck = 0

ngAfterViewChecked() {
  if (this.contentCheck < 3) {
  this. cdkVirtualScrollViewport.scrollToIndex(4000);
  this.contentCheck++;
 }
}
Run Code Online (Sandbox Code Playgroud)

3 次检查后,scrollToIndex 是否有效。