У мене є планкер, де у мене простий метод оновлення-метод оновлення 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 для відповіді № 1The 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.