我使用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);
}
但这似乎对火焰基地没有任何影响......任何想法我做错了什么?
答案 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)
谢谢你。我会试一试..我正在迭代所有项目的原因是我正在响应画布项目上的拖动事件,我需要知道它被拖动的项目...我想我可以保留作为拖动对象的一部分,并直接解决它...婴儿步骤! 的问候,