更新数组项angularfire

时间:2014-01-31 14:26:57

标签: javascript angularfire

我使用angularfire $ add方法添加{id:integer,name:name}形式的基本js对象 现在,如果我想更新一个特定的项目(通常有一个firebase分配的键,如“-JEcA_f70efHbKi5js7j”),我的印象是我应该使用$ save方法。 以下是我尝试这样做的方法:

$scope.chosenColors = $firebase(myChosenColorsRef);


$scope.updateColor = function(data){ //data is a JS object like {id:'id',name:'name'}

    if($scope.chosenColors.$getIndex().length>0){
        var keys = $scope.chosenColors.$getIndex();
        keys.forEach(function(key, i) { 
            if($scope.chosenColors[key].id!=data.id){//if id matches I want to update name
                $scope.chosenColors[key] = {id:data.id,name:data.name}
                $scope.chosenColors.$save[key];
                return;
            }
        });
    }else{
        $scope.chosenColors.$add(data);         
    }

但这似乎对火焰基地没有任何影响......任何想法我做错了什么?

2 个答案:

答案 0 :(得分:2)

首先,您应该调用$save方法,而不是简单地使用密钥访问它:

$scope.chosenColors.$save(key);

其次,你迭代所有的键来找出你想要保存的那个,这是非常低效的。您应该更改updateColor参数以将key作为参数。

<div ng-repeat="(key, color) in chosenColors">
  <a ng-click="updateColor(key, color)">Update</a>
  ...
</div>

function updateColor(key, data) {
  $scope.chosenColors[key] = data;
  $scope.chosenColors.$save(key);
}

答案 1 :(得分:0)

谢谢你。我会试一试..我正在迭代所有项目的原因是我正在响应画布项目上的拖动事件,我需要知道它被拖动的项目...我想我可以保留作为拖动对象的一部分,并直接解决它...婴儿步骤! 的问候,