Firebase JavaScript SDK和AngularFire的正确实现

Firebase JavaScript SDK和AngularFire的正确实现,javascript,angularjs,firebase,firebase-realtime-database,angularfire,Javascript,Angularjs,Firebase,Firebase Realtime Database,Angularfire,我一直在使用AngularFire,因为它的代码很简单,如果您使用的是香草JavaScript和Firebase,那么它可以为您节省大量的代码 所以我有一个控制器: function sampleCtrl($scope, $firebaseArray) { var counter = 0; var ref = firebase.database().ref().child('reports') $scope.reports = $firebaseArray(ref); $

我一直在使用AngularFire,因为它的代码很简单,如果您使用的是香草JavaScript和Firebase,那么它可以为您节省大量的代码

所以我有一个控制器:

function sampleCtrl($scope, $firebaseArray) {
   var counter = 0;
   var ref = firebase.database().ref().child('reports')
   $scope.reports = $firebaseArray(ref);
   $scope.reports.$loaded(function () {
      counter = $scope.reports.length;
   })
}
假设我的报告中目前有3项
ref
,因此变量
计数器的值将为
3

现在我的问题是,每当有新的数据时,我想增加它。这就是我所做的,因为我不能用AngularFire来做:

ref.orderByKey().limitToLast(1).on('child_added', function (data) {
    counter++;
});
例如,如果有新数据,计数器值应变为
4
,但它变为6,因为它仍然计算所有数据。因此,每当有新数据时,
计数器
变量将加倍

这有什么诀窍吗?或者是更好的方法


任何帮助都将不胜感激。

为什么不使用$scope.reports.length?其中已包含您请求的值,并使用Angular的编译器正确更新?不太清楚您期望它何时增加,除了每个收到的记录增加一次之外。此外,避免$loaded;答案通常是错误的。@Kato谢谢你。这实际上是可行的,不过我现在的问题是,当有新的子元素添加时,我想播放一个声音。你也可以使用
$firebaseArray.$watch
来观察更改并用声音或任何你想要的声音来响应。@idan会尝试的。现在我只需要添加child_,这样我就可以播放声音了