我正处在角度火种的教程阶段,并尝试了消息和子帖子,出于某些奇怪的原因,当我明确尝试显示子对象时,我看不到子对象,但是在控制台的父节点上展开时却可以看到子对象。这些消息在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
在此先感谢您指出我的误会!
您似乎不喜欢常见的异步问题。
这是您的代码片段:
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阵列的 承诺 ,将来会包含您的数据。
$asArray()
到您console.log(sync)在控制台中检查出out时,数据将已下载,因此(如您所说)它是正确的同步阵列。但是当该console.log(sync.length)行运行时,数据可能尚未下载。
console.log(sync)
console.log(sync.length)
您可以等待使用该$loaded()方法下载数据。所以:
$loaded()
var sync = $firebase(ref).$asArray(); console.log(sync); sync.$loaded().then(function(sync) { console.log(sync.length); console.log(sync[1]); }