Сохранение частичных данных с Angularfire

0

Привет, У меня есть установка с угловыми сетчатыми и угловыми диаграммами, где местоположения блоков и диаграммы генерируются из данных Firebase.

что-то вроде этого

<div gridster-item="widget" ng-repeat="widget in widgets" ng-init="getTheData(widget)">
    <canvas id="line-gridster" class="chart-base" chart-type="widget.type" data="widget.data" labels="widget.labels" legend="false" series="widget.series" ></canvas>
</div>

И в контроллере

var fire = new Firebase(FIREURL);
$scope.widgets = $firebaseArray(fire)


var getChart = {

    a: function(days){
        return aChartFactory.createChartData(days);
    },
    u: function(days){
        return uChartFactory.createChartData(days);
    },

}


$scope.getTheData = function(widget){

    getChart[widget.data](widget.time).then(function(data){

        widget.data = data[1];
        widget.labels = data[0];
        widget.series = data[2];

    });

};

Исходные данные виджета выглядят так:

widget.$id {
    row: 1,
    col: 2,
    sizeX: 2,
    sizeY: 2,
    type: 'bar',
    labels: 'labels',
    data: 'a',
    series: 'series',
    time: 30
}

фабрики внутри getChart предназначены только для создания диаграмм.

Проблема, с которой я сталкиваюсь, - это когда я пытаюсь сохранить местоположение перемещенных блоков из сетки.

потому что серверные блоки могут иметь новые строки и столбцы, перемещая блок, который я пытался обернуть $ scope.widgets. $ save в функции forEach.

И новые позиции блока сохраняются в хорошем состоянии, но также создаются widget.data диаграммы, widget.labels и widget.series.

Поэтому мои первоначальные настройки заменяются, что означает, что теперь диаграммы статичны.

Я попытался поместить child(). Вместо этого внутри foreEach нужно сохранить только необходимые атрибуты, но это, похоже, не работает. Я предполагаю, потому что я не могу сделать цикл на firebase ref, только массив, где я не могу сделать.set

Есть ли другой способ установить только определенные атрибуты для всех элементов?

Теги:
firebase
angularfire

1 ответ

3
Лучший ответ

У AngularFire нет способа обновлять только часть объекта. Но поскольку AngularFire построен поверх Firebase JavaScript SDK, у вас есть доступ ко всем преимуществам, которые предлагает. Это означает, что вы можете использовать метод Firebase.update(), который будет обновлять только указанные вами свойства.

Если у вас есть объект $firebaseObject, вы можете обновить некоторые свойства с помощью:

object.$ref().update({ key1: 'newValue1', key7: 'newValue2' });
  • 0
    Хорошо, я попробую, так что, может быть, получить запись по идентификатору на всех блоках, а затем ваш пример?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню