Как обновить определенные ключи объекта с помощью $ firebaseObject? - PullRequest
0 голосов
/ 11 декабря 2018

Проблема

В настоящее время, если нам нужно обновить пару ключ-значение в ссылке $ firebaseObject, angularfire предлагает использовать метод $ save () примерно так:

var obj = $firebaseObject(ref);

// Changing just the name
obj.name = "New Rahul";

obj.$save().then(function(ref) {
  ref.key === obj.$id; // true
}, function(error) {
  console.log("Error:", error);
});

Ссылка: https://github.com/firebase/angularfire/blob/master/docs/reference.md#save

Итак, предположим, что объект в базе данных firebase:

{ name: 'Rahul', age: 23 }

И мы выполним приведенный выше код, он переместит полностью обновленный объект в базу данных, т.е.

{ name: 'New Rahul', age: 23 }

в то время как вы можете ожидать, что он будет просто толкать его так:

{ name: 'New Rahul' }

Сначала это выглядит нормально, так как в базе данных все будет выглядеть так, как ожидалось.

Проблема появляется, когда на картинке появляются правила пожарной базы.Допустим, age был просто ключом только для чтения, а name разрешено обновлять клиентам.

Теперь, когда $ firebaseObject (ref) получен, он получит все ключи.(имя и возраст), но когда мы пытаемся изменить только name и вызвать $save(), firebase скажет Permission Denied, поскольку он также пытается .set() с полным объектом, который включает в себя свойство только для чтения age.

Мой вопрос?

Я хочу знать, как я могу добиться обновления только определенного набора ключей с помощью $ firebaseObject, а не полного объекта.

Мои наблюдения

Внутренне код angularfire вызывает метод firebase ref.set(), который помещает весь объект в базу огня:

https://github.com/firebase/angularfire/blob/master/src/database/FirebaseObject.js#L95

https://github.com/firebase/angularfire/blob/b6dca6ea5a81b3edd44230fb1cb6ca62419f1926/src/utils/utils.js#L332

ТакжеЯ думаю, что, может быть, мы можем использовать $ extended для достижения этой цели, но не в состоянии это выяснить.Так что оцените любую помощь.

...