2015-08-21 46 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