【问题标题】:How to solve duplicate page in ion-infinite-scroll ionic 4如何解决 ion-infinite-scroll ionic 4 中的重复页面
【发布时间】:2019-09-16 11:59:06
【问题描述】:

我正在使用 ionic 4,并且正在使用 ion-infinite-scroll 进行分页。我的问题是我总是遇到重复页面问题。我能知道如何解决这个重复的问题吗?这是我在 home.page.ts 中的代码:

doInfinite(event) {
    this.userService.getData().then(res => {
      event.target.complete();
    });
  }

  loadData(event) {
    console.log('Load more data');

    this.userService.getData().then(res => {
      event.target.complete();
    });
  }

这里是 home.html

<ion-infinite-scroll (ionInfinite)="loadData($event)">
    <ion-infinite-scroll-content
      loadingSpinner="bubbles"
      loadingText="loading ...">
    </ion-infinite-scroll-content>
  </ion-infinite-scroll>

【问题讨论】:

    标签: ionic4


    【解决方案1】:

    这取决于你的userService.getData() 是什么样的。

    您似乎没有告诉它从偏移量开始。

    每次下拉数据时,都应该将该列表数据分配给一些本地页面变量,比如dataList

    然后使用this.dataList.length 作为下一个数据请求的起始索引。

    所以一些关于这可能如何工作的伪代码是:

    let dataFeed = [];
    let startAtRecord = 0;
    
    constructor() {
      this.userService.getData(startAtRecord).then(res => {
        this.dataFeed = res;
        this.startAtRecord = this.dataService.length;
      });
    }
    
    loadData(event) {
      // ask for a batch of records, starting at `startAtRecord`
      this.userService.getData(startAtRecord).then(res => {
        // add the new res data to the existing dataFeed
        this.dataFeed = [...this.dataFeed, ...res];
        // keep track of the number of records loaded
        this.startAtRecord = this.dataService.length;
        event.target.complete();
      });
    }
    

    你明白我在说什么吗?数据服务必须加载下一页数据,这样您就不会得到相同的数据,因此它需要跟踪列表的起始位置。

    【讨论】:

    • 感谢您的回复,我的 getData() 是从 API 获取数据,然后我将使用 array.next 获取我的响应
    • 我已经更新了我的问题并添加了一些示例代码,它不会编译,因为您需要更新数据服务才能从起始偏移量开始工作,但它应该会给您一些想法关于如何实现它。
    猜你喜欢
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多