/ / save firebaseObject. $ save () перезаписує весь вузол - firebase, angularfire

$ firebaseObject. $ save () перезаписує весь вузол - firebase, angularfire

У мене є планкер, де у мене простий метод оновлення-метод оновлення recorcd. Але коли я додаю або оновлюю властивість до запису, весь запис буде перезаписаний.

Дані

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

оновити ()

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

Ось це планкер.

Чи може хтось пояснити мені таку поведінку?

Відповіді:

4 для відповіді № 1

The AngularFire $save() метод дійсно перезаписує поточні дані в цьому місці. Він реалізується за допомогою виклику set() метод SDK Firebase ", що робить саме це.

Оскільки ви телефонуєте $save() одразу після створення посилання дані ще не завантажувались із серверів Firebase. Отже, ви створюєте об'єкт з єдиними властивостями test1. Коли ви тоді $save() що об’єкт на сервері, ви також перебуваєте в об'єкті з одним властивістю.

Якщо ви хочете лише оновити деякі властивості, ви можете зателефонувати update().

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

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

Це не використовує AngularFire. Але оскільки AngularFire побудований на базі звичайного SDK Firebase JavaScript, вони взаємодіють без проблем.

Крім того, ви можете використовувати AngularFire "s $loaded() обіцяють зачекати, поки об’єкт завантажиться повністю. Але це призведе до набагато більше коду та зменшення даних.

Моє правило:

Використовуйте лише AngularFire для прив'язки речей до $scope. Для всього іншого скористайтеся Firebase JavaScript SDK.