如何在Firebase

时间:2016-01-22 12:48:58

标签: angularjs firebase

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

但它仍然将对象添加为新对象,但不是现有对象! 有什么想法吗?

3 个答案:

答案 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();
                    };                  
                }
            });
        }
弗兰克:谢谢你的回答!真有帮助!