AngularFire:$ firebaseArray更改时的run方法

时间:2015-11-26 13:46:56

标签: javascript angularjs firebase

我有以下设置:

var x = $firebaseArray(ref);
x.$loaded().then(function () {

    self.y = //I change y based on x

}

根据文档$loaded仅运行一次,但每次self.y更新时我都需要更改x。我知道我可以延长$firebaseArray,但就我而言,这不是一个选项,因为self.y也可以依赖另一个$firebaseArray

所以我的问题是:有没有办法在每次$firebaseArray更新时运行一个方法,即使在JavaScript中一般也有办法观察变量的变化并且每次都运行一个方法。

2 个答案:

答案 0 :(得分:2)

如果要在数据发生变化时对数据执行某些操作,$loaded()是错误的方法。相反,您需要extend $firebaseArray并覆盖$$added$$changed ...方法。请参阅this fiddle for an example of extending a $firebaseObject,这是类似的。

但是,如果您没有将$firebaseArray()绑定到范围,那么您也可以使用常规的Firebase JavaScript SDK并使用on('value'

ref.on('value', function(snapshot) {
    self.y = // change y based on snapshot.val()
});

AngularFire是一个很棒的库,用于将Firebase数据绑定到AngularJS视图。它不是Firebase JavaScript SDK的替代品。事实上,它构建于Firebase JavaScript SDK之上,两者完美互操作。因此,使用AngularFire将数据绑定到视图(如果需要自定义数据,则扩展$firebaseArray),使用Firebase JavaScript SDK来处理未绑定到视图的数据。

答案 1 :(得分:1)

如果您使用的是AngularJS,则可以使用$watchRead More Here

在你的情况下你可以做到

  $scope.$watch('$firebaseArray', function(newV, oldV) {
         // Run whatever method you want
      }, true);