使用Angularfire保存部分数据

时间:2015-08-21 09:56:49

标签: javascript angularjs firebase angularfire

您好我有一个角度网格和角度图表设置,其中块位置和图表是从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中的工厂只是用于生成chartdata。

我遇到的问题是当我试图从gridster中保存移动块的位置时。

因为通过移动块我可以有多个块可以有新的行和列,我试图在forEach函数中包装$ scope.widgets。$ save。

新的块位置保存得很好,但生成的chartdata widget.data,widget.labels和widget.series也是如此。

所以我的初始设置被替换,这意味着现在图表是静态的而不是..

我尝试将child()。设置在foreEach中,而不是只保存所需的属性,但这似乎不起作用。 我想这是因为我不能在firebase ref上做循环,只有数组,我不能做.set

还有其他方法我只能在所有项目上设置特定属性吗?

1 个答案:

答案 0 :(得分:3)

AngularFire没有只更新对象部分的方法。但是,由于AngularFire是基于Firebase的JavaScript SDK构建的,因此您可以访问所提供的所有优点。这意味着您可以使用Firebase.update()方法,该方法只会更新您指定的属性。

如果您有$firebaseObject,则可以使用以下内容更新某些属性:

object.$ref().update({ key1: 'newValue1', key7: 'newValue2' });