微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cdk-virtual-scroll-viewport 无法呈现正确数量的项目

如何解决cdk-virtual-scroll-viewport 无法呈现正确数量的项目

我正在为一个虚构的超市(个人学习项目)创建一个 Angular 应用程序,我的数据库中有大约 5000 种产品,我想通过无限滚动加载到我的应用程序中。

width cdk-virtual-scroll 我设法做到了,但我无法正确调整 itemsize 和 maxBuffers/minBuffers,最好的结果是实验性功能 autosize 但结果非常不稳定,我不能依赖它。 .

问题似乎是我正在尝试加载包含 3 或 4 行产品的产品网格(显示 flex),当我滚动时一切正常,然后加载包含 1 个产品的一行,或者2,然后随机弹出其余的产品..这样是不可行的..

有什么帮助吗?我真的很想使用无限滚动而不是分页..

我的组件 html:

'leop'

我的CSS:

  <app-scroll-to-top [@inAnimation] (click)="scrollTop()" *ngIf="scrollPosition"></app-scroll-to-top>
<cdk-virtual-scroll-viewport class="viewport" (scroll)="onScroll($event)" autosize>
 `enter code here` <div #productsContainer class="products-container">
    <div *cdkVirtualFor="let product of productsToShow" class="product-card">
      <div class="img-container">
        <img [src]="product.imagen" [alt]="product.nombre">
        <div class="price-tag">
          <p>{{product.precio}}€</p>
        </div>
        <div [@inAnimation] *ngIf="product.cantidad === 1" class="cantidad-tag">
          <p>{{product.cantidad}} Agregado</p>
        </div>
        <div [@inAnimation] *ngIf="product.cantidad > 1" class="cantidad-tag">
          <p>{{product.cantidad}} Agregados</p>
        </div>
      </div>
      <div class="product-texts">
        <p>{{product.marca}}</p>
        <p>{{product.nombre}}</p>
        <p>{{product.descripcion}} </p>
      </div>
      <button (click)="addProduct(product)" class="mi-boton btn btn-info">Añadir</button>
    </div>
  </div>
</cdk-virtual-scroll-viewport>

我的组件 TS:

cdk-virtual-scroll-viewport.viewport,virtual-scroller{
  height: 60vh;
  width: 100%;
  /* border: 5px solid black */
  scroll-behavior: smooth;
  scrollbar-color: var(--secondary-color) var(--primary-color);
  margin: 1em auto;
}

我的服务可以获取所有 5000 种产品:

 export class ProductsComponent implements OnInit {
  faSearch = faSearch;
  searchText: string;
  category: any;
  productsToShow: Product[];
  productsInList: Product[];
  scrollPosition: number;
  itemsize = 250;
  @ViewChild('productsContainer',{ read: ElementRef }) public panel: ElementRef<any>;
  @ViewChild(CdkvirtualscrollViewport) virtualscroll: CdkvirtualscrollViewport;


  constructor(
    private navbarService: NavbarService,private listasService: ListasService,private productsService: ProductsService
  ) {

    this.productsInList = this.listasService.getNewList();
    this.navbarService.showNavbar(true);

  }

  async ngOnInit() {
    this.category = await this.productsService.getSelectedCategory();
    if (!this.category) {
      this.category = { name: 'todos los productos' }
    }

    this.productsToShow = await this.productsService.getAllProducts();

    this.productsInList.forEach(product => {
      this.productsToShow.find(producto => {
        if (producto.id === product.id) {
          producto.cantidad = product.cantidad
        }
      });
    })
  }

请帮助...

enter image description here

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?