web-dev-qa-db-fra.com

Définition de votre propre clé lors de l'ajout d'un objet à Firebase - AngularFire

Je peux utiliser les éléments suivants pour ajouter un objet à mon magasin de données 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
});

Ce qui précède va ajouter un objet dans mon magasin de données et si l'ajout est réussi, un ID généré par Firebase est renvoyé. L'objet que je viens d'ajouter est enregistré sous cette clé. 

Existe-t-il un moyen de spécifier le nom de la clé lorsque j'ajoute à mon magasin de données?

15
Lloyd Banks

Tout dans Firebase est une URL.

Prenez l'URL suivante par exemple.

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

Disons que nous voulons créer un utilisateur avec une clé de 1 en tant qu'enfant à cet emplacement. Notre URL ressemblerait à ceci.

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

Pour créer un utilisateur à l'aide d'AngularFire, nous pouvons créer une référence sur le nœud users et appeler $ child (1) pour créer une référence à cet emplacement. 

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);

Ensuite, nous pouvons utiliser $set pour stocker la valeur de l'utilisateur à cet emplacement.

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
});

Dans votre cas ce serait:

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

N'oubliez pas que l'utilisation de $set détruira toutes les données précédentes à cet emplacement. Pour mettre à jour les valeurs de manière non destructive, utilisez $update.

17
David East

Vous pouvez l'essayer comme ça:

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

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

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

Le résultat devrait ressembler à ceci:

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

Il semble que $ child et $ set ont été supprimés de l'API AngularFire. 

Voici ma solution de contournement. 

  1. Écoutez $ onAuth
  2. Créez un nouveau $ firebaseObject avec la référence en tant qu'enfant des utilisateurs et l'id en tant que l'uid (dans ce cas, facebook)
  3. Enregistrer l'objet utilisateur

    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;
    })
    

J'ai encore du mal à rendre ce testable ...

3
Alex

.set travaille toujours dans api angularfire

Alors, essayez ceci ...

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