При загрузке страницы я получаю данные из 15 записей, после прокрутки вниз я могу вызвать API, но он возвращает пустой массив (у меня всего 40 записей в моей базе данных firestore).
// Service.ts
getUsers(config: any) {
return this.firestore
.collection(
'users',
ref => ref
.where('country', '==', 'India')
.orderBy('lastlogin')
.startAfter(config.page * config.limit)
.limit(config.limit)
)
.snapshotChanges();
}
// Component
getUsers() {
this.loader = true;
this.userService.getUsers(this.config).subscribe((res: any) => {
this.loader = false;
const data = res.map((e: any) => ({
id: e.payload.doc.id,
...e.payload.doc.data()
}));
this.usersCollection = this.usersCollection.concat(data);
});
// Infinite Scroll
onScroll() {
this.config.page += 1;
this.getUsers();
}
Мое решение
Проблема только в том, что в первый раз lastVisible нет данных, необходимо установить значение 0.
getUsers(config: any, lastVisible) {
const { doc } = lastVisible.payload ? lastVisible.payload : { doc: 0}
return this.firestore
.collection(
'users',
ref => ref
.where('country', '==', 'India')
.orderBy('lastlogin')
.startAfter(doc)
.limit(config.limit)
)
.snapshotChanges();
}
// Component
getUsers() {
this.loader = true;
this.userService.getUsers(this.config, this.lastVisible).subscribe((res: any) => {
this.loader = false;
this.lastVisible = res[res.length - 1];
const data = res.map((e: any) => ({
id: e.payload.doc.id,
...e.payload.doc.data()
}));
this.usersCollection = this.usersCollection.concat(data);
});