在我的应用程序中,我使用$ firebaseObject从我的firebase获取一个对象。该对象有两个选项,更改它并保存对象中的更改或更改它并将其另存为新版本。
我的问题是让第二个选项起作用。对于第一个我可以简单地使用$ save()并且它完美地运行但是到目前为止我还没有能够制作对象的副本并将其保存在我的firebase中的不同位置。
到目前为止,我已尝试过:
前3个选项失败(错误代码与选项一起显示),最后一个选项有效,但实际上不是一个选项,因为该对象可以有不同的字段。
有没有人知道这个问题的解决方案?
答案 0 :(得分:1)
您可以使用$ firebaseObject的$ value字段。
例如:
var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
var FBObj1 = $firebaseObject(ref.child('child'));
ref.child('newChild').set(FBObj1.$value);
编辑:
由于这只适用于基元,你可以尝试这样的事情:
function getObject(obj) {
var newObj = {};
for (var key in obj) {
if (key.indexOf('$') < 0 && obj.hasOwnProperty(key)) {
newObj[key] = obj[key];
};
}
return newObj;
}
并使用FBObj1的getObject(FBObj1)insetad。$ value
答案 1 :(得分:0)
难以置信的有用答案。添加我自己的解决方案,这只是对Frane的扩展并使用Angularfire 2.3:
最终结果:
html:
<a href="#" editable-text="data.field1" onaftersave="saveData()">
{{ data.field1 || "empty" }}
</a>
<a href="#" editable-text="data.field2" onaftersave="saveData()">
{{ data.field2 || "empty" }}
</a>
在控制器中:
var ref = firebase.database().ref().child(entries);
var obj = $firebaseObject(ref);
obj.$bindTo($scope, "data");
function saveData(){
$scope.data.$save().then(function() {
var newObject = getObject($scope.data);
// In theory, add other field here
var ref2 = firebase.database().ref().child(otherNode).child($scope.data.$id);
ref2.update(newObject);
}).catch(function(error) {
console.log('Error ' + error.message);
});
}
function getObject(obj) {
var newObj = {};
for (var key in obj) {
if (key.indexOf('$') < 0 && obj.hasOwnProperty(key)) {
newObj[key] = obj[key];
};
}
return newObj;
}