【问题标题】:Trying to get child records from Firebase试图从 Firebase 获取子记录
【发布时间】:2014-12-03 19:04:42
【问题描述】:

我正处于 angular-fire-seed 教程阶段并尝试消息和子帖子,由于某些奇怪的原因,当我明确尝试显示它们时我看不到它们,但在扩展中的父节点时可以看到它安慰。这些消息在我有 ng-repeat 的 html 中正确显示,所以我知道我至少收到了这些消息,尽管没有孩子。

我认为 angularfire-seed 工具可能会切碎或切片一些孩子,所以我恢复为直接火力基地

这就是我所拥有的:

Code:
-----
var url = fbutil.ref() + "/messages/";
var ref = new Firebase(url);

var sync = $firebase(ref).$asArray();

console.log(sync);          //this I can see as a proper $firebaseArray object
console.log(sync.length);   //this displays as 0 even though length is 3 in object above
console.log(sync[1]);       //displays as undefined 

Data:
----
messages/id1/text
        /id2/text
        /id2/post
        /id3/text

提前感谢您指出我的错误假设!

【问题讨论】:

    标签: angularjs firebase angularfire


    【解决方案1】:

    您似乎陷入了常见的异步问题。

    这是您的代码片段:

    var sync = $firebase(ref).$asArray();
    
    console.log(sync);        //this I can see as a proper $firebaseArray object
    console.log(sync.length); //this displays as 0 even though length is 3 in object above
    console.log(sync[1]);     //displays as undefined 
    

    $asArray() 的调用不会立即返回 Firebase 数组,因为数据可能需要一些时间才能从 Firebase 服务器上下来。因此,它会返回 Firebase 数组的 promise,将来会包含您的数据。

    当您在控制台中检查 console.log(sync) 的输出时,数据将已下载,因此它(如您所说)是一个正确的同步数组。但是当console.log(sync.length) 行运行时,数据可能还没有下载。

    您可以等待使用$loaded() 方法下载数据。所以:

    var sync = $firebase(ref).$asArray();
    
    console.log(sync);
    sync.$loaded().then(function(sync) {
      console.log(sync.length); 
      console.log(sync[1]);     
    }
    

    【讨论】:

      【解决方案2】:

      AngularFire Accessing child element methods得到答案

      简短回答:一旦分配给 JS var,它就是 POJO,不再是 $firebase 对象了。

      【讨论】:

      • 很高兴您发现我的回答很有帮助,但我认为这不是您的问题的原因。我也会在这里写一个答案。
      猜你喜欢
      • 2015-04-17
      • 1970-01-01
      • 2021-10-26
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 2019-02-21
      • 1970-01-01
      相关资源
      最近更新 更多