Javascript 正在更新数组项angularfire

Javascript 正在更新数组项angularfire,javascript,angularfire,Javascript,Angularfire,我正在使用angularfire$add方法添加{id:integer,name:name}形式的基本js对象 现在,如果我想更新一个特定的项目(通常有一个firebase指定的键,比如“-JEcA_f70efHbKi5js7j”或其他什么,我的印象是我应该使用$save方法。 以下是我如何尝试做到这一点: $scope.chosenColors = $firebase(myChosenColorsRef); $scope.updateColor = function(data){ //da

我正在使用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);         
    }

但这似乎对firebase没有任何影响……你知道我做错了什么吗?

首先,你应该调用
$save
方法,而不是简单地用键访问它:

$scope.chosenColors.$save(key);
其次,您要迭代所有键,以确定要保存的键的效率非常低。您应该更改updateColor参数,将
键作为参数

<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);
}

更新
...
函数updateColor(键、数据){
$scope.chosenColors[key]=数据;
$scope.chosenColors.$save(键);
}

谢谢。我会试一试。我迭代所有项目的原因是我对画布项目上的拖动事件做出响应,我需要知道正在拖动的是哪个项目……我想我可以将其作为拖动对象的一部分,并直接对其进行处理。小步!
关于,

我认为这应该是一个评论,而不是一个回答。