Javascript 正在更新数组项angularfire
我正在使用angularfire$add方法添加{id:integer,name:name}形式的基本js对象 现在,如果我想更新一个特定的项目(通常有一个firebase指定的键,比如“-JEcA_f70efHbKi5js7j”或其他什么,我的印象是我应该使用$save方法。 以下是我如何尝试做到这一点: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
$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(键);
}
谢谢。我会试一试。我迭代所有项目的原因是我对画布项目上的拖动事件做出响应,我需要知道正在拖动的是哪个项目……我想我可以将其作为拖动对象的一部分,并直接对其进行处理。小步!
关于,我认为这应该是一个评论,而不是一个回答。