使用 Value() 方法从 Firebase 检索对象

Retrieving Objects from Firebase using Value() Method

我不知道如何让 "value" 以与 "child_added" 相同的方式读取我的 FB 对象中的数据。 以下代码:

  postNotes.on("value", function(snapshot){
  console.log("VALUE FUNCTION REACHED")
  var note = snapshot.val();
  console.log(note.noteObject);
});

postNotes.on("child_added", function(snapshot){
  console.log("CHILDADDED FUNCTION REACHED");
  var note = snapshot.val();
  console.log(note.noteObject);

}, function (errorObject) {
  console.log("The read failed: " + errorObject.code);
});

...在控制台中显示:

这是FB控制台中的数据:

我不使用任何库。我只想在我的页面加载时显示来自 FB 的数据,并在每次将新数据推送到 FBDB 时继续更新。

我是否遗漏了 "value" 参数的要点?我能做些什么更好?

请放弃涉及 "read the docs"、"use jquery" 之类的答案,或者某些 StackO 用户似乎非常喜欢的无用答案。 几个小时以来,我一直在研究我的这个问题,根据我在 StackO 中看到的其他内容,其他一些人也遇到了类似的问题。非常感谢您查看我的问题并提供您可能拥有的任何见解。

您使用相同的 postsRef 来监听 valuechild_added 事件。这不是一个常见的使用模式。

value 事件在节点值更改时触发。因此,每当 -J....NI3 父节点 更改时,整个 父节点 节点将作为 snapshot 传递到您的回调中。如果您检查 Firebase 仪表板中的数据,您会看到此 parent 节点没有 noteObject child.

将其与 child_added 事件进行比较,当 子节点添加 到您监听的节点时,该事件会触发。在这种情况下,对 child_added 的回调获取作为其 snapshot 传递的新子节点。而新的子节点确实有一个noteObject个child.

您通常会在单个最低级别节点上收听 value 事件。当你有一个节点集合时(就像你在这里所做的那样),你通常会使用 child_added(及其 _changed_deleted_moved 兄弟)。但以防万一您真的想对集合使用 on('value'

postNotes.on('value', function(notesSnapshot) {
    notesSnapshot.forEach(function(noteSnapshot) {
        console.log(noteSnapshot.val());
    });
});

请注意,这种方法的效率低于监听各种 child_ 事件,尤其是当您动态添加或更改集合中的子项时。