8 javascript pagination ionic4 google-cloud-firestore
我正在使用 Ionic 上的 Firestore 编写一个包含按时间顺序排列的用户帖子(最新帖子在顶部)的个人资料页面,方法是将orderBy () 设置为“时间戳”降序。当用户到达底部时,我使用 Ionic 的无限加载来加载更多帖子,但结果是 Firestore 一遍又一遍地加载完全相同的帖子。请帮忙!
你好!
抱歉,如果这是一个初学者问题,但我已经为此思考了几个小时,但无济于事。按升序排列时分页工作正常,但按降序排列时会加载相同的帖子。我已经考虑过尝试以下替代方案,但它们不具有成本效益:
。
'''
READ_posts__profile(uid,limit, start) : Promise<[]>
{
return new Promise((resolve, reject) =>
{
if (start == null)
{
resolve();
}
else if(start == 'head')
{
start = new Date();
}
console.log(start);
this._DB.collection(this.ref.posts + uid + '/userposts' )
.orderBy("timestamp", 'desc').startAfter(start).limit(limit)
.get()
.then((querySnapshot) =>
{
let obj : any = [];
console.log(obj);
querySnapshot
.forEach((doc : any) =>
{
obj.push({
id : doc.id,
content : doc.data().content,
likes : doc.data().likes,
timestamp : doc.data().timestamp,
comments : doc.data().comments
});
});
resolve(obj);
})
.catch((error : any) =>
{
reject(error);
});
});
}
Run Code Online (Sandbox Code Playgroud)
'''
预期结果:从最新到最旧的帖子无限滚动 结果:前 x 帖子一次又一次无限滚动(限制为 x)
感谢您抽出时间阅读。希望很快能收到你们的来信!
更新以供将来参考: 它不是在 .startAfter() 中使用文档本身,而是使用 doc.timestamp 来工作,如下所示:
this._DB.collection(this.ref.posts + uid + '/userposts' )
.orderBy("timestamp", "desc").startAfter(start.timestamp).limit(this.limit)
.get()
.then(querySnapshot =>
{
Run Code Online (Sandbox Code Playgroud)
小智 8
就我而言,我添加了这样的查询
query.startAfter(lastId)
Run Code Online (Sandbox Code Playgroud)
它应该在哪里
query = query.startAfter(lastId)
Run Code Online (Sandbox Code Playgroud)
问题是startAfter()期望参数的查询游标,而不是您传递的时间戳。
查询游标标识文档:
\n\n\n\n您需要做的是将其保存doc到类级别的变量中,然后将其与下一个变量一起传递:
// in the class variables at the top\nlatestEntry: any;\n\n// then save a reference to it\nthis.latestEntry = data[data.length - 1].doc;\n\n// Now you can use the latestEntry to query with startAfter\n.startAfter(this.latestEntry)\nRun Code Online (Sandbox Code Playgroud)\n\n这是一般理论。当我自己在应用程序中实现此功能时,我使用了此答案中的代码。
\n\n需要对代码进行大量重写才能做到这一点,这超出了我现在的时间范围,但希望这会帮助您自己解决它。
\n| 归档时间: |
|
| 查看次数: |
16004 次 |
| 最近记录: |