web-dev-qa-db-ja.com

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が返されます。追加したオブジェクトはこのキーの下に保存されます。

データストアに追加するときにキー名を指定する方法はありますか?

14
Lloyd Banks

Everything FirebaseではURLです。

たとえば、次のURLを見てください。

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

この場所で、キー1を持つユーザーを子として作成するとします。 URLは次のようになります。

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を使用します。

17
David East

あなたはこのようにそれを試すことができます:

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"
  }
}
9
Lee

$ childと$ setがAngularFire APIから削除されたようです。

これが私の回避策です。

  1. $ onAuthをリッスンします
  2. Refをユーザーの子、idをuid(この場合はfacebook)として、新しい$ firebaseObjectを作成します。
  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;
    })
    

私はまだこれをテスト可能にするために苦労しています...

3
Alex

.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,
                });
0
Asaph Souza