【问题标题】:Unable to get length of Firebase Objects无法获取 Firebase 对象的长度
【发布时间】:2015-03-24 22:43:12
【问题描述】:

我目前正在使用 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

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

【问题讨论】:

  • 与我在下面的回答无关:我觉得您的问题是基于某些教程或课程。如果是这样的话,你能指出我的教程/课程吗?我想阅读更多关于它的内容,因为你不是第一个被任务卡住的人,也许我们可以做一些事情来帮助人们更有条理地完成任务。
  • 对象没有长度。数组可以。此外,this guide 可能是最好的开始,因为它解释了 AngularFire 的基本原理,如对象和数组。我也想知道是谁发布了这个教程。让我感到困惑的是,为什么官方文档是最后的手段,以及为什么这么多在 JavaScript 对象等没有 .length 属性的基础上苦苦挣扎的人却经常试图在第一天就征服 Angular 和 Firebase。

标签: json angularjs firebase angularfire


【解决方案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“事件”并做出回应

请注意,AngularFire 已经将数据的任何更改通知 AngularJS,因此如果您只是将数据绑定到 $scope 并将其显示在您的视图中,则无需响应 $loaded

【讨论】:

    猜你喜欢
    • 2018-08-27
    • 2018-07-16
    • 2017-06-17
    • 2018-05-11
    • 1970-01-01
    • 2014-04-30
    • 2015-03-24
    • 1970-01-01
    • 2018-04-30
    相关资源
    最近更新 更多