无法获得Firebase对象的长度

时间:2015-01-26 13:57:40

标签: json angularjs firebase angularfire

我目前正在使用AngularFire,并尝试获取数据库中对象的长度。

在我的Firebase中,结构看起来像

popping-fire-5575
  celio
   -JgaQt-tNq-gRVIVZdCD
     artist:  
     track:  
   -JgaQuBoYk9VX3pWylx3
     artist: 
     track: 
   -JgaQuf_pyBFJ7EA1Fo_
     artist: 
     track: 

在我的控制器中,

var profileObject = FirebaseDemo.getBroadcast($routeParams.param);
var twotwo = profileObject.$asObject();
twotwo.$bindTo($scope, 'data');

当我控制台登录变量' twotwo'时, 我得到回报

Object
$$conf: Object
$id: "celio"
$priority: null
-JgaQt-tNq-gRVIVZdCD: Object
-JgaQuBoYk9VX3pWylx3: Object
-JgaQuf_pyBFJ7EA1Fo_: Object
__proto__: Object

然而,我尝试了所有不同的方法来获得长度,但我无法取得成功。有人可以给我一些指示或提示吗?

1 个答案:

答案 0 :(得分:1)

Firebase异步加载(并同步)您的数据,因此当您的console.log语句运行时,它可能仍在忙于加载数据。

幸运的是,AngularFire有一种在初始加载数据时通知并运行代码的方法:

var twotwo = profileObject.$asArray();
twotwo.$loaded().then(function(data) {
    console.log('Initial data loaded', data.length);
});

您的代码中的两个主要更改:

  1. 使用$asArray()代替$asObject(),因为您的数据结构是数组
  2. 聆听$loaded“事件”并回复
  3. 请注意,AngularFire已经通知AngularJS数据的任何更改,因此如果您只是将数据绑定到$loaded并在视图中显示,则不必回复$scope