在观看firebaseArray的同时获取child_added的内容

时间:2015-05-12 11:39:55

标签: angularjs firebase angularfire watch

我有一个简单的私聊,但是有不同类型的消息,所以当我发送到服务器json结构时,我也传递了消息类型。

$scope.messages = fireChat.firebaseArray;
$scope.addMessage = function(e) {

    //ADD TO FIREBASE
    $scope.messages.$add({
        uid: $scope.authData.uid,
        text: $scope.msg,
        timestamp: Firebase.ServerValue.TIMESTAMP,
        type: 'msg'
    });

    $scope.msg = ""; //RESET MESSAGE

};

正如您所看到的,有“属性”类型。

现在我想留意任何新消息。与文档中一样,有一个监视API函数,但它只返回记录/消息的ID。我想获取消息的内容并检查type是什么,然后根据运行其他js函数。

$scope.messages.$watch(function (data) {
    console.log("angularfire watch");
    console.log(data);
    console.log(data.event);
    console.log(data.key);
    console.log(data.prevChild);
});

以上内容仅返回child_added -Jp6KZWlyDtDETz8Agpr-Jp6KZWlyDtDETz8ospr。如你所见,钥匙下没有身体
是否有可能获得关键内容?所以我可以做例如

switch (key.type) {
  case 'paid':
    animate_paid();
}

修改

$scope.messages.$watch(function (data) {
    console.log("angularfire watch");
    console.log(data);
    console.log(data.event);
    console.log(data.key);
    console.log($scope.messages.$getRecord(data.key));
});

上面的代码最终起作用

1 个答案:

答案 0 :(得分:1)

您可以使用$ getRecord来执行此操作:

console.log($scope.messages.$getRecord(data.key));

您可以在这里查看数组api:https://www.firebase.com/docs/web/libraries/angular/guide/synchronized-arrays.html