选择Firebase数组的子集时,不会调用ref.on(...)

时间:2015-09-03 09:37:19

标签: firebase angularfire

我有两个数组,$ scope.messages和$ scope.aggregatedMessages。 $ scope.messages绑定到Firebase数组。 $ scope.messages有一个date属性,用于仅显示特定日期的消息。非常简单。添加新消息或用户更改日期时,我希望重新加载aggregatedMessages数组。

$scope.messages = $firebaseArray(ref.orderByChild("date").equalTo(date));

...用于将$ scope.messages数组与Firebase绑定。选择新日期时,将再次调用上述功能。

ref.on("value", function(value) {
...
});

...用于在发生变化时重建aggregatedMessages数组(我知道,应该使用child_added等等......我稍后将会这样做)。

现在,这不起作用,因为当$ scope.messages中添加了一个新项目时,Firebase不会调用我的回调函数(在ref.on中),$ scope.messages。$ add(... )做好工作并按照预期行事。

这种情况的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

最佳做法是不重建firebaseArray,如果数据被添加到firebase ref,它们将自动同步。

$scope.messages = $firebaseArray(ref.orderByChild("date").equalTo(date));

$scope.messages.$ref().on('child_added', function(snap){
  console.log(snap.key(), snap.val());
})

ref.push(data)
// > console will log the new data key and value if data.date == date

如果你必须重建firebaseArray,不要忘记在删除它之前调用$ destroy,告诉firebase不要再听ref和​​清除内存

$scope.messages.$destroy()
$scope.messages = $firebaseArray(ref.orderByChild("date").equalTo(aNewDate));