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

Llo*_*nks 15 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
});
Run Code Online (Sandbox Code Playgroud)

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

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

Dav*_*ast 17

Firebase中的所有内容都是一个网址.

以下面的URL为例.

https://myapp.firebaseio.com/users/
Run Code Online (Sandbox Code Playgroud)

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

https://myapp.firebaseio.com/users/1
Run Code Online (Sandbox Code Playgroud)

要使用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);
Run Code Online (Sandbox Code Playgroud)

然后我们可以$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
});
Run Code Online (Sandbox Code Playgroud)

在你的情况下,它将是:

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

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


小智 9

你可以这样试试:

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

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

empsRef.child('22222').set({
  lastname: "Nut",
  firstname: "Dough"
});
Run Code Online (Sandbox Code Playgroud)

输出应如下所示:

"employees" : {
  "11111" : {
    "lastname" : "Lee",
    "firstname": "Kang"
  },
  "22222" : {
    "lastname" : "Nut",
    "firstname": "Dough"
  }
}
Run Code Online (Sandbox Code Playgroud)