我有一个Firebase对象,如下所示:
-notifications
-1-1-2017 1:08:22 PM
-message: 'test'
-timestamp: 1483294112
-1-1-2017 1:08:23 PM
-message: 'two'
-timestamp: 1483294113
-1-1-2017 2:08:22 PM
-message: 'three'
-timestamp: 1483294473
我不断将新属性推送到密钥为日期时间的notifications
对象中。
如果我的notifications
如下所示,如何获取附加到$watch
对象的最新属性?
var ref = new Firebase(firebaseConstants.url + 'notifications');
var sync = $firebase(ref);
$scope.notifications = sync.$asArray();
$scope.$watch('notifications', function(){
......
});
我想避免在$scope.notifications
上运行循环来查找旧值和新值之间的差异。
使用Firebase JS API或AngularFire库是否有内置方法可以执行此操作?
答案 0 :(得分:0)
好吧,好像你正在使用一个过时的angularfire版本。我的答案将基于最新版本(2.2.0)。但是,根据这个答案,我将在1.0.0以后提供我将使用的所有功能:https://stackoverflow.com/a/28896261/6162666
由于您要求使用内置方式执行此操作,因此我不会尝试仅根据$ scope提供答案。$ watch。 Angularfire对象和数组已经支持了$ watch方法很长一段时间了。您只需在$ firebaseArray上调用$ watch,它就会告诉您新事件发生的时间。
请注意$ watch在$ firebaseArray / $ firebaseObject上调用,而不在$ scope上调用。
说完所有这些,如果你将代码转换为最新版本的angularfire,它看起来像这样:
var ref = new Firebase(firebaseConstants.url + 'notifications');
var notifications = $firebaseArray(ref);
notifications.$watch(function(events){
console.log(events); //Logs all the child_added events when new notifications are pushed
});
相比之下,docs中给出的示例如下:
var list = $firebaseArray(ref);
list.$watch(function(event) {
console.log(event);
});
list.$remove("foo");
// logs { event: "child_removed", key: "foo" }
list.$add({ hello: "world" });
// logs { event: "child_added", key: "<new_id>", prevId: "<prev_id>" }
稍后,您可以调用$ destroy()来停止侦听更改。
我应该指出,这只会在添加时显示新的ID,这似乎正是您所需要的。