To better explain i am using fake API which has data of 5K. Works perfectly on mobile device, tested.
.html file -
<ion-card *ngFor="let post of posts | slice:0:limit">
<ion-card-header>
<ion-card-subtitle>{{post.title}}</ion-card-subtitle>
<ion-card-title>{{post.title}}</ion-card-title>
</ion-card-header>
<ion-card-content>
{{post.title}}
</ion-card-content>
</ion-card>
<ion-list></ion-list>
<ion-infinite-scroll threshold="100px" (ionInfinite)="loadData($event)">
<ion-infinite-scroll-content loadingSpinner="bubbles" loadingText="Loading more data...">
</ion-infinite-scroll-content>
</ion-infinite-scroll>
.ts file
import { Component, OnInit, ViewChild } from '@angular/core';
import { NavController, IonInfiniteScroll } from '@ionic/angular';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-tab4',
templateUrl: './tab4.page.html',
styleUrls: ['./tab4.page.scss'],
})
export class Tab4Page implements OnInit {
@ViewChild(IonInfiniteScroll) infiniteScroll: IonInfiniteScroll;
posts: any;
limit = 10;
constructor(private http: HttpClient, private navCtrl: NavController) { }
ngOnInit() {
this.http.get('https://jsonplaceholder.typicode.com/photos').subscribe(response => {
this.posts = response;
});
}
loadData(event) {
setTimeout(() => {
this.limit += 10;
event.target.complete();
if (this.limit === this.posts.length) {
event.target.disabled = true;
}
}, 300);
}
}
Hope it help someone.