Javascript AngularFire:$firebaseArray更改时运行方法

Javascript AngularFire:$firebaseArray更改时运行方法,javascript,angularjs,firebase,Javascript,Angularjs,Firebase,我有以下设置: var x = $firebaseArray(ref); x.$loaded().then(function () { self.y = //I change y based on x } 根据文档$loaded只运行一次,但每次x更新时,我都需要更改self.y。我知道我可以扩展$firebaseArray,但在我的情况下,这不是一个选项,因为self.y在另一个$firebaseArray上也是可靠的 所以我的问题是:是否有一种方法可以每次更新$firebase

我有以下设置:

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

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

}
根据文档
$loaded
只运行一次,但每次
x
更新时,我都需要更改
self.y
。我知道我可以扩展
$firebaseArray
,但在我的情况下,这不是一个选项,因为
self.y
在另一个
$firebaseArray
上也是可靠的


所以我的问题是:是否有一种方法可以每次更新
$firebaseArray
时都运行一个方法,即使在JavaScript中,是否有一种方法可以观察变量的变化并每次运行一个方法。如果您使用的是AngularJS,那么您可以使用
$watch

在你的情况下,你可以这样做

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

如果要在数据发生更改时对其执行某些操作,
$loaded()
是错误的方法。相反,您将希望添加并覆盖
$$added
$$changed
。。。方法。看,这是相似的

但是如果您没有将
$firebaseArray()
绑定到作用域,那么您最好使用常规的Firebase JavaScript SDK并在('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。

是,但除非我缺少仅适用于范围变量的内容。在这种情况下,x是一个局部变量。AngularFire不需要监视,因为您可以从服务器接收更新并对这些更改采取行动。