如何在forEach循环中保存数据?

时间:2015-07-17 13:10:01

标签: angularjs firebase angularfire

我创建了一个forEach循环。我可以使用此循环从Firebase访问数据,我可以更改变量。但我无法在Firebase上保存这些更改。如何保存这些更改?这是我的代码:

var posts = $firebaseArray(ref);

posts.$loaded().then(function(item){
  item.forEach(function(childSnapshot){
    var num = childSnapshot.point-1;

    childSnapshot.lastPoint = num;
  });
});

2 个答案:

答案 0 :(得分:1)

您正在使用AngularFire framework,它会在Firebase的常规JavaScript SDK之上构建UI绑定。您应该只将它用于您绑定到Angular UI元素的内容。对于其他所有事情,您最好使用Firebase's regular JavaScript SDK

如果我正确理解您的要求,您将尝试遍历数据库位置中的所有子节点并修改属性。如果是这样的话:

function displayFile($entry) {
    $imgPath = "./img/path/";
    $entry = implode('/', explode('../', $entry));
    $path = $imgPath.$entry;

    switch(true) {
        case is_file($path) : 
         return $path;
         break;

        case (is_dir($path) AND !is_file($path)) :
         $files = array_filter(glob($path."/*"), 'is_file');
         if(!empty($files)) {
             return $path . basename(array_values($files)[0]);
         }
         break;
    }

    return $imgPath . 'paw.png';
}

Firebase文档的相关部分位于reading data onceupdating data

由于AngularFire构建于Firebase的JavaScript SDK之上,因此它们可以完美地协同工作。因此,如果您在其他地方将帖子绑定到范围(ref.once('value', function(snapshot) { snapshot.forEach(function(childSnapshot) { var child = childSnapshot.val(); childSnapshot.ref().update({ lastPoint: child.point - 1 }); }); }); ),则在使用上述代码段更新最后一个点时,它们将自动更新。

答案 1 :(得分:0)

您可以创建包含getter和setter的服务。它看起来像这样;

angular.module('app').factory("DataHandler",
  function() {
    var data;
    return {
      get: function() {
        return data;
      },
      set: function(something) {
        data = something;
      }
    }
  }
);

然后在你的代码中你会打电话:

var posts = $firebaseArray(ref);

posts.$loaded().then(function(item){
  item.forEach(function(childSnapshot){
    var num = childSnapshot.point-1;
    childSnapshot.lastPoint = num;
    DataHandler.set(childSnapshot);
  });
});

然后,只要您需要获取该数据,只需致电:

Datahandler.get();