【发布时间】:2021-12-13 21:58:45
【问题描述】:
我有一些这样的数据:leaderboards/board/{board id}/{child properties}
我为板添加了一个侦听器,如下所示:
const boardRef = firebase.database().ref('leaderboards/board');
boardRef.on('child_added', (snapshot) => {
// handle data
});
那部分工作正常。然后我想听一个板上的特定属性,看看它是否发生了变化。我确实不想听听板上的所有孩子的变化,因为几个孩子可能会非常频繁地变化,我们不想处理那么多数据,除非需要(某个应用状态)。所以,我尝试了这个:
const endedRef = firebase.database().ref('leaderboards/board/123/ended');
endedRef.on('value', (snapshot) => {
// handle data
});
但是,当我在 Firebase 中更新 'ended' 属性时,不会调用侦听器。它仅在我第一次添加侦听器时调用(因此它似乎已正确连接)但在属性更改时不会调用。解决这个问题的正确方法是什么?
这篇文章很相似,但由于我已经在该属性上尝试了一个“值”侦听器,因此似乎不是修复或不适用于我的数据:How to listen to a specific value change in Firebase?
感谢您的所有帮助!
【问题讨论】:
-
您的代码看起来是正确的,根据我的经验,当
ended的123属性发生变化时应该触发。如果在那种情况下会触发snapshot是ended属性的新值,而不是整个板的快照。这不是你看到的吗?如果是这样,您能否在回调中显示您在快照中获得的内容? -
我只在添加侦听器时获得快照,而不是在更改值时获得快照,这就是问题所在。但正如我所料,快照确实只是结束的属性:
false -
嗯...我不知道为什么会这样。你能在 jsbin 或 stackblitz 这样的网站上设置问题的重现,以便我看一下吗?
-
哈哈好吧,我很高兴你让我这样做......我无法在 jsbin 中重现,所以意识到这是我代码中其他地方的问题。 (事实证明,我在向量对象中添加了监听器,由于代码访问,对象的副本被破坏,这正在删除我的监听器。)它现在正在工作,感谢你帮助我到达那里! :)
-
很高兴听到你找到了原因米兰达 ????这是我们经常要求minimal/isolated repro 的原因之一。 :)
标签: javascript firebase firebase-realtime-database