2017-01-01 58 views
0

我有一個火力地堡對象,看起來像:Firebase JavaScript/AngularFire - 如何獲取觀看對象的最新添加屬性?

-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對象,其中的關鍵是日期時間。

如果我有一個$watch,看起來像下面那樣,我如何獲取notifications對象附加的最新屬性?

var ref = new Firebase(firebaseConstants.url + 'notifications'); 
var sync = $firebase(ref); 
$scope.notifications = sync.$asArray(); 
$scope.$watch('notifications', function(){ 
    ...... 
}); 

我想避免$scope.notifications運行循環以查找新舊值之間的差異。

是否與無論是火力地堡JS API或AngularFire庫做這個內置的方式嗎?

回答

0

好吧,好像你正在使用一個過時的angularfire版本。我的答案將基於最新版本(2.2.0)。然而,我將在這裏使用的所有功能都可以從1.0.0開始根據這個答案:https://stackoverflow.com/a/28896261/6162666

由於您要求內置的方式來做到這一點,我不會嘗試給出一個答案僅限於$ scope。$ watch。 Angularfire對象和數組現在已經很長時間支持$ watch方法。您可以簡單地在$ firebaseArray中調用$ watch,它會告訴您何時發生新事件。

注意$手錶叫上你的$ firebaseArray/$ firebaseObject,而不是你的$範圍。

說到這一切,如果你轉換你的代碼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,這似乎正是你需要的。