将对象添加到Firebase时设置自己的密钥 - AngularFire

时间:2014-07-03 17:38:31

标签: javascript angularjs firebase angularfire

我可以使用以下内容将对象添加到Firebase数据存储中:

var uniqueId = {
    name: "a name",
    location: "new york"
}
$scope.myItems.$add(uniqueId).then(function(firebaseId){
    // do something on success
}, function(){
    // do something if call fails
});

上面会在我的数据存储中添加一个对象,如果添加成功,则会返回Firebase生成的ID。我刚刚添加的对象保存在此键下。

当我添加到数据存储时,有没有办法指定键名是什么?

4 个答案:

答案 0 :(得分:17)

Firebase中的

Everything 是一个网址。

以以下网址为例。

https://myapp.firebaseio.com/users/

假设我们想在这个位置创建一个密钥为1的用户。我们的网址看起来像这样。

https://myapp.firebaseio.com/users/1

要使用AngularFire创建用户,我们可以在用户节点创建一个引用,并调用$ child(1)来创建对该位置的引用。

var usersRef = new Firebase('https://myapp.firebaseio.com/users');
var userRef = new Firebase('https://myapp.firebaseio.com/user/1');

$scope.users = $firebase(usersRef);

// these are the same
$scope.userOne = $firebase(userRef);
$scope.userOne = $scope.users.$child(1);

然后我们可以使用$set在该位置存储用户的值。

var usersRef = new Firebase('https://myapp.firebaseio.com/users');
$scope.users = $firebase(usersRef);
$scope.users.$child(1).set({
  first: 'Vincent',
  last: 'Van Gough',
  ears: 1
});

在你的情况下,它将是:

var uniqueId = {
    id: 1,
    name: "a name",
    location: "new york"
};
$scope.myItems.$child(uniqueId.id).$set(uniqueId);

请记住,使用$set会破坏该位置的所有先前数据。要非破坏性地更新值,请使用$update

答案 1 :(得分:9)

你可以这样试试:

var empsRef = ref.child("employees");

empsRef.child('11111').set({
  lastname: "Lee",
  firstname: "Kang"
});

empsRef.child('22222').set({
  lastname: "Nut",
  firstname: "Dough"
});

输出应如下所示:

"employees" : {
  "11111" : {
    "lastname" : "Lee",
    "firstname": "Kang"
  },
  "22222" : {
    "lastname" : "Nut",
    "firstname": "Dough"
  }
}

答案 2 :(得分:3)

看起来$ child和$ set已从AngularFire API中删除。

这是我的解决方法。

  1. 听取$ onAuth
  2. 创建一个新的$ firebaseObject,其中ref为用户的子节点,id为uid(在本例中为facebook)
  3. 保存用户对象

    angular.module("app.services", []).factory("Auth", function ($firebaseAuth, $firebaseObject, FirebaseUrl) {
    var auth = $firebaseAuth(new Firebase(FirebaseUrl));
    
    auth.$onAuth(function (authData) {
        if (authData) {
            var ref = new Firebase(FirebaseUrl + "/users/" + authData.uid);
            var user = $firebaseObject(ref);
            user.name = authData.facebook.displayName;
            user.$save().then(function () {
                console.log(user);
            });
        }
    });
    return auth;
    })
    
  4. 我仍在努力使这个可测试但是......

答案 3 :(得分:0)

.set仍然在angularfire api中工作

所以,试试这个......

var gT = $scope.ultima[0].guia + 1;                    
var _db = firebase.database().ref('/guias/' + gT);
                      _db.set({
                    'artigo': _dt.artigo,
                    'inicio': $scope.ultima[0].fim + 1,
                    'guia': $scope.ultima[0].guia + 1,
                    'fim': $scope.ultima[0].fim + 1 + (1 * _dt.quantidade),
                    'quantidade': _dt.quantidade,
                });