typescript - Ionic 5 虚拟滚动创建空白空间而不是新项目

标签 typescript ionic-framework ionic4 angular8

this is the output problem image

我正在尝试使用 ion-virtual-scroll 渲染列表,但是当我动态更新列表时,它不会显示新项目并创建空白空间,但是当我检查滚动时,该项目出现在列表中CSS 属性“transform:translate3d(0px, -9999px, 0px);”

   <ion-col size="12" size-sm="8" offset-sm="2" class="ion-text-center">
    <ion-virtual-scroll [items]="listedLoadedPlaces"

    >
      <ion-item

        [routerLink]="place.id"
        detail
        *virtualItem="let place"
      >
        <ion-thumbnail slot="start">
          <ion-img [src]="place.imageUrl"></ion-img>
        </ion-thumbnail>
        <ion-label>
          <h2>{{place.title}}</h2>
          <p>{{place.description}}</p>
        </ion-label>
      </ion-item>
    </ion-virtual-scroll>
  </ion-col>

最佳答案

遇到此问题或类似问题的任何人都可能需要尝试运行 checkRangecheckEnd 这些由 IonVirtualScroll 提供的 api 标记最后一项或指定的项目为脏,以触发该项目的全新渲染。

在 ionic 角度项目中,它看起来像这样。

template: <ion-virtual-scroll #listedLoadedPlacesScroll [items]="listedLoadedPlaces">
           <ion-item........

component:
  @ViewChild('#listedLoadedPlacesScroll', null) listedLoadedPlacesScroll: IonVirtualScroll;

.....
functionToUpdateList(): void {
   this.listedLoadedPlaces.push(newItem);
   this.listedLoadedPlacesScroll.checkEnd();
}

如果您只需要更新不是源数据数组中最后一项的特定项目,您将使用 checkRange

template: <ion-item
        [routerLink]="place.id"
        detail
        *virtualItem="let place; let index = index;"
        (click)="doSomething(place, index)"
      >

component:
    doSomething(place, index): void {
      ..do something to place...
      this.listedLoadedPlacesScroll.checkRange(index, 1);
}

checkRange 中,您指示 IonVirtualScroll 元素将索引处的项目标记为脏,第二个参数是 len 表示 length,它是要标记为脏的项目(包括当前项目)的数量。 SO len = 3 表示这些位置的索引、索引 + 1、索引 + 2 项将被标记为脏并进行新渲染。

我遇到一个问题,更改 View 中的项目需要更改 View 外的项目,解决方案是将所有项目标记为脏 checkRange(0, items.length),以优雅的方式也许,但现在它可以按预期工作。

关于typescript - Ionic 5 虚拟滚动创建空白空间而不是新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62450717/

相关文章:

html - 如何在 ion-item 中并排对齐 ion-label 和 ion-img

Angular 2 router.navigate 在嵌套的 js 函数中不起作用

css - 使用 scss @each 生成 css 变量不起作用

javascript - 如何在我的 React 类中的接口(interface)中包含接口(interface)?

javascript - 从图片中拍摄的照片在 Android 中的 cordova 相机插件中裁剪时不会显示

css - Ionic 2 - 无法在包含 ionic 输入的 ionic 项内添加 ionic 图标

cordova - 如何使用 ionic 框架在 IOS 上获取 IMEI

ionic-framework - 对象不是函数 - IONIC 3 Facebook 登录

javascript - 在 JQuery Id 选择器的 .css() 方法中指定输入类型

mysql - 如何通过外键将 Angular 数据表中另一个表中的字段?