【问题标题】:Saving partial data with Angularfire使用 Angularfire 保存部分数据
【发布时间】:2015-08-21 09:56:49
【问题描述】:

您好,我有一个带有 angular gridster 和 angular chartjs 的设置,其中块位置和图表是从 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 里面的工厂只是用来生成图表数据的。

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

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

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

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

我尝试将 child().set 放在 forEach 中,而不是只保存所需的属性,但这似乎不起作用。 我想这是因为我无法在 firebase ref 上执行循环,只能在数组上执行循环,而我无法在其中执行 .set

有没有其他方法可以只为所有项目设置特定属性?

【问题讨论】:

    标签: javascript angularjs firebase angularfire


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,我会试试的,所以也许可以在所有块上按 id 获取记录,然后是你的例子?
    猜你喜欢
    • 1970-01-01
    • 2019-04-12
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多