一尘不染

尝试从Firebase获取子记录

angularjs

我正处在角度火种的教程阶段,并尝试了消息和子帖子,出于某些奇怪的原因,当我明确尝试显示子对象时,我看不到子对象,但是在控制台的父节点上展开时却可以看到子对象。这些消息在ng-
repeat所在的html中正确显示,所以我知道至少得到了消息,尽管没有孩子。

我以为angularfire-seed utils可能会砍掉或切掉一些孩子,所以我回到了直火基地

这就是我所拥有的:

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

在此先感谢您指出我的误会!


阅读 189

收藏
2020-07-04

共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阵列的
承诺 ,将来会包含您的数据。

到您console.log(sync)在控制台中检查出out时,数据将已下载,因此(如您所说)它是正确的同步阵列。但是当该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]);     
}
2020-07-04