/ / $ firebaseObject. $ save () écrase tout le noeud - firebase, angularfire

$ firebaseObject. $ save () écrase tout le noeud - firebase, angularfire

J'ai un plunker où j'ai une méthode simple update-pour mettre à jour un recorcd. Mais lorsque j'ajoute ou met à jour une propriété dans l'enregistrement, l'intégralité de l'enregistrement est écrasée.

Les données

{
"org1" : {
"description" : "too lazy",
"name" : "Apple",
"website" : "http://www.apple.com"
},
"org2" : {
"name" : "Google",
"test1" : "test123",
"website" : "http://www.google.com"
}
}

mettre à jour()

this.update = function() {
//var obj = new Organization("org2");
var obj = $firebaseObject(new Firebase("https://thefactorymess.firebaseio-demo.com/organizations/org2"));
obj.test1 = "test123";
obj.$save().then(function() {
console.log("org new", obj);
});
};

Voici la plongeur.

Quelqu'un peut-il m'expliquer ce comportement?

Réponses:

4 pour la réponse № 1

Le feu angulaire $save() La méthode écrase en effet les données actuelles à cet endroit. Il est mis en œuvre en appelant le set() méthode du SDK JavaScript de Firebase, qui le fait précisément.

Depuis que tu appelles $save() immédiatement après la création de la référence, les données n’ont pas encore été chargées à partir des serveurs Firebase. Vous créez donc un objet avec une seule propriété. test1. Quand vous $save() Cet objet sur le serveur, vous vous retrouvez avec un objet avec une propriété unique là aussi.

Si vous souhaitez uniquement mettre à jour certaines propriétés, vous pouvez appeler update().

var ref = new Firebase("https://thefactorymess.firebaseio-demo.com/organizations/org2");

ref.update({ test1: "test123" });

Cela n’utilise pas AngularFire. Mais puisque AngularFire est construit sur le SDK JavaScript de Firebase standard, ils s’interopèrent sans problèmes.

Sinon, vous pouvez utiliser AngularFire "s $loaded() promettent d'attendre que l'objet soit complètement chargé. Mais cela conduirait à beaucoup plus de code et à la réduction des données.

Ma règle de base est:

Utilisez uniquement AngularFire pour lier des éléments au $scope. Pour tout le reste, utilisez le SDK JavaScript de Firebase.