angular - 如何将 cdk-virtual-scroll 与 ngx-infinite-scroll 一起使用

标签 angular virtualization infinite-scroll angular-cdk angular-cdk-virtual-scroll

我已经升级了我的 Angular 项目依赖项:

  • @ Angular/核心:^14.2.9
  • @Angular/cdk:^14.2.9
  • @ Angular/ Material :^14.2.6
  • ngx-infinite-scroll:~14.0.1

此后,无限滚动(带有虚拟化)停止工作。

我观察到,如果 scrollWindow 属性设置为 false,则 cdk-virtual-scroll-viewport 不再添加滚动> 并且 ngx-infinite-scroll 需要将该属性设置为 false

<cdk-virtual-scroll-viewport
  *ngIf="items.length"
  class="virtualScrollViewport"
  itemSize="80"
  minBufferPx="400"
  maxBufferPx="600"
  infiniteScroll
  [infiniteScrollDistance]="1"
  [infiniteScrollThrottle]="50"
  [infiniteScrollDisabled]="loading || !loaded || !canLoadMoreItems"
  [scrollWindow]="false"
  (scrolled)="onScroll()"
>
  <div><p class="text-bold">Available items</p></div>
  <mat-card *cdkVirtualFor="let itemof items; trackBy: trackByFunction">
    <mat-card-content>
      ...
    </mat-card-content>
  </mat-card>

  <mat-progress-bar *ngIf="loading && items?.length" mode="indeterminate"></mat-progress-bar>
</cdk-virtual-scroll-viewport>

现在滚动不再显示(不再添加.cdk-virtual-scrollable类)。如果没有 [scrollWindow]="false" ,但是无限滚动不起作用,因为基于它们的 documentation这个属性是必要的。因此,这两件事是正面交锋的。

有人遇到过同样的问题并找到解决方法吗?

最佳答案

@ViewChild(CdkVirtualScrollViewport)


 set scrollEvent(scrollRef: CdkVirtualScrollViewport) {if (scrollRef) {
  if (
    //note: scrolled container size must be greater than 0, we have to scroll from the top and bottom must have an offset smaller than 50 to trigger
    scrollRef.measureRenderedContentSize() > 0 &&
    scrollRef.measureScrollOffset("top") !== 0 &&
    scrollRef.measureScrollOffset("bottom") < 50
  ) {
    this.scrolled.emit();
  }
} }

我也遇到了同样的问题,我想出了一个解决方法。所以你可以自己监听滚动事件并添加你自己的滚动事件显示规则。所以在我的例子中,我检查元素是否有高度,我们从顶部开始滚动,底部是否至少为 50px。这可行,但我仍在寻找更好的解决方案。

关于angular - 如何将 cdk-virtual-scroll 与 ngx-infinite-scroll 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74640256/

相关文章:

node.js - 分页/无限滚动时 Firebase endAt() 与 orderByChild() 的时髦行为

forms - 窗体控件错误 :ERROR Error: No value accessor for form control with unspecified name attribute

javascript - 如何使用 rxjs 对先前的项目链接多个 .map() 调用

memory - 无硬件支持的虚拟内存

notifications - 如何在VMware Player中将来自访客操作系统的通知推送/显示到主机OS

javascript - 用于在滚动时加载数据(从数据库)的 JQuery 插件

css - 平稳过渡

angular - 将列和数据动态加载到 Angular 2 中的表中

docker - 如何对 Windows 应用程序进行 Docker 化

android - 更改 ViewPager 以启用无限页面滚动