2015-08-21 44 views
0

嗨我有一个角度网格和角度图表的设置,其中块位置和图表是从Firebase数据生成的。使用Angularfire保存部分数据

像这样

<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> 

和Controller

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 。

我遇到的问题是当我试图保存从网格移动块的位置。

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

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

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

我试图把孩子()的foreEach的内部设置,而不是保存刚才所需要的属性,但是这似乎并没有不工作。 我想这是因为我无法做到firebase ref上的循环,只有阵列,我不能这样做.set

是否有任何其他方式可以在所有项目上只设置特定属性?

回答

3

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

如果你有$firebaseObject,您可以更新一些属性:

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

好吧,我会尝试一下,所以可能通过ID上的所有块一个得到记录,然后你的榜样? – Stellan