这是我关于stackoverflow的第一篇文章,并且我正在寻求一些帮助,因为我已经为此花了一段时间了。
我目前正在使用Firebase开发Web应用程序,并且正在使用onSnapshot
方法。目前,我正在从数据库中返回用户列表
UI。
以下是我填充UI的函数。
db.collectionGroup('items').where("userid", "==", user.id).orderBy('date', "desc").limit(80).onSnapshot(snapshot => {
snapshot.docChanges().forEach(change => {
if (change.type === 'added') {
setupLedger(snapshot.docs, doc.id)
}
if (change.type === 'modified') {
setupLedger(snapshot.docs, doc.id)
}
if (change.type === 'removed') {
deleteLedger(user, doc.id);
}
});
});
在页面加载时,我会用type: "added"
获取所有必要的数据
(see this)
当我单击EDIT
(即修改)时,会发生我的问题,它仅返回修改后的条目并更新修改后的条目(see this)。但是,如果我在另一个字段上单击EDIT
,它将显示上一个条目,而不是当前条目(see this)。我将如何更改我的方法,以便获得所有条目,包括修改后的条目?本质上,我只想更新当前项,一旦更新,我想返回数组(包含修改后的项)。
(旁注:如果刷新页面,则返回包含修改后的项目的数组,并且一切正常。)
答案 0 :(得分:1)
受查询影响的所有文档(无论是否已修改)都可以通过snapshot.docs
访问,而有关已更改文档的其他信息则可以通过snapshot.docChanges()
访问。因此,请考虑将您的代码更改为以下内容:
db.collectionGroup('items').where("userid", "==", user.id).orderBy('date', "desc").limit(80).onSnapshot(snapshot => {
snapshot.docs.forEach(doc => {
...
}
}