我有以下设置:
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中一般也有办法观察变量的变化并且每次都运行一个方法。
答案 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,则可以使用$watch
。
Read More Here
在你的情况下你可以做到
$scope.$watch('$firebaseArray', function(newV, oldV) {
// Run whatever method you want
}, true);