我正在使用Firebase和AngularJS制作应用。我坚持也许简单也许不是 - 通过在Firebase中的现有对象中添加新属性的问题,这就是我的意思:
-K8cmeQRt4giLD9BHEEX {
users: {
age: 28,
fname: John,
lname: McGregor,
id:{
uid: id-hash
}
}
}
-K8cmrrsDknx17ccjZ3d{
users: {
age: 35,
fname: Ian,
lname: Smith,
id:{
uid: id-hash
}
}
}
我的工厂:
addToUserObject: function (calls) {
var ref = new Firebase(globalFirebase);
var append = ref.push();
ref.orderByChild("users").startAt().on("child_added", function(snapshot) {
var val = snapshot.val();
var aid = ref.getAuth();
for(var key in val){
if (val[key].id.uid === aid.uid) {
append.parent().child('users').set(calls);
};
}
});
}
但它仍然将对象添加为新对象,但不是现有对象! 有什么想法吗?
答案 0 :(得分:7)
调用set()
会使用您指定的值/对象替换该位置的值。因此,每次拨打append.parent().child('users').set(calls)
时,都会替换整个users
节点
如果要向现有对象添加新属性(或更新属性的子集),请调用update()
方法。我不确定它是如何适用于您的情况,但类似于append.parent().child('users').update({ newCalls: calls })
。
如果您尝试将新的子节点添加到列表中,则需要使用push()
:append.parent().child('users').push(calls)
。这将生成一个新的推送ID,类似于您已有的-K8cmeQRt4giLD9BHEEX
值。
请注意Firebase's guide for JavaScript developers中涵盖了所有这些以及更多内容。我强烈建议你在那里度过一段时间。
答案 1 :(得分:1)
要将属性favoris
添加到用户对象
function Add_user_favoris(){
var db = firebase.database()
var ref = db.ref();
var usersRef = ref.child("users");
// alanisawesome is the key of the object
var hopperRef = usersRef.child("alanisawesome");
hopperRef.update({
"favoris": "list ,list list"
});
}
答案 2 :(得分:0)
这是我对issu的解决方案:
getNativeUserObject: function (exp) {
var ref = new Firebase(globalFirebase);
var aid = ref.getAuth();
ref.on('value', function (snap) {
var data = snap.val();
for(var key in data){
if (aid.uid === data[key].users.id.uid) {
data[key].users.calories = exp;
ref.child(key).update(data[key]);/*SOLUTION*/
window.location.reload();
};
}
});
}
弗兰克:谢谢你的回答!真有帮助!