15

我有一个包含许多项目的列表,每个项目都可以选择。为此,我使用 Angular Material Virtual Scroll。当一个项目被选中时,被选中的项目被高亮显示,然后被保存在服务器上。当我刷新页面时,所选项目来自服务器并再次突出显示。

我的代码看起来像

<cdk-virtual-scroll-viewport itemSize="40" class="wrapper">
  <div *cdkVirtualFor="let item of list"
       [class.selected]="item.id === selectedItem.id">
  </div>
</cdk-virtual-scroll-viewport>

问题是,如果选择列表中的一个项目,它会突出显示,但我必须向下滚动到列表才能看到它。当该项目来自服务器时,我想以编程方式向下滚动到它。

我的文档有一种scrollToIndex方法。我在哪里可以找到 的实例FixedSizeVirtualScrollStrategy,所以我可以调用这个方法?

4

1 回答 1

24

当然,您需要获取对CdkVirtualScrollViewport实例的引用。

@ViewChild(CdkVirtualScrollViewport) viewPort: CdkVirtualScrollViewport;

scrollToMiddle(){
  this.viewPort.scrollToIndex(list.length/2, "smooth");
}

可以在这个 stackblitz中找到一个例子

对于滚动到列表中选定元素的索引的要求,您可以执行以下操作:

ngAfterViewInit(){
  const selectedIndex = this.list.findIndex(elem => elem.id === this.selectedItem.id);
   if(selectedIndex > -1){
     this.viewPort.scrollToIndex(selectedIndex);
   }
}

注意:这假定列表在生命钩子期间已经加载ngAfterViewInit。由于您尚未提供有关如何设置列表值的更多信息,因此这是我能提供的最好的。

于 2019-02-06T10:29:33.837 回答