我目前正在使用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
然而,我尝试了所有不同的方法来获得长度,但我无法取得成功。有人可以给我一些指示或提示吗?
答案 0 :(得分:1)
Firebase异步加载(并同步)您的数据,因此当您的console.log
语句运行时,它可能仍在忙于加载数据。
幸运的是,AngularFire有一种在初始加载数据时通知并运行代码的方法:
var twotwo = profileObject.$asArray();
twotwo.$loaded().then(function(data) {
console.log('Initial data loaded', data.length);
});
您的代码中的两个主要更改:
$asArray()
代替$asObject()
,因为您的数据结构是数组$loaded
“事件”并回复请注意,AngularFire已经通知AngularJS数据的任何更改,因此如果您只是将数据绑定到$loaded
并在视图中显示,则不必回复$scope