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 № 1Le 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.