angularjs-nvd3-directives更新数据

时间:2014-04-16 13:31:39

标签: javascript angularjs d3.js

下午好。

我有一个角度控制器,它有我在图表中显示的数据

<nvd3-multi-bar-horizontal-chart
                ng-model="Data"
                data="Data"
                id="exampleId"
                xAxisTickFormat="xAxisTickFormatFunction()"
                yAxisTickFormat="yAxisTickFormatFunction()"
                height={{height}}
                showValues="true"
                color="colorFunction()"
                showXAxis="true"
                margin="{left:100}"
                interactive="true"
                >
            <svg></svg>
</nvd3-multi-bar-horizontal-chart>

编辑: 应用程序需要做的是显示数组中的所有数据,用户可以调整该数组的1个元素

我现在尝试使用ng-click页面上的按钮模拟这个,执行以下方法调整数组中的1个元素

$scope.buttonClick = function(){

        $scope.Data[0].values[0][1] = 2345; //this changes the data but does not update the chart

        $scope.Data = [
            {
                key: "timeData",
                values: [
                    ["test", 1234]
                ]
            }
        ] //this completely overrides the array and replaces it (which i dont want)
    };

控制器更新数据,但图表不会更新

我测试了这一点,显示了段落中数据的第一个条目,它正确地更新了

有没有人知道如何解决这个问题

(链接到angular chart directive中使用的指令)

提前致谢

3 个答案:

答案 0 :(得分:3)

请发布您的解决方案。

文档说明要设置objectequality="true"

参考:nvd3

答案 1 :(得分:1)

从查看来源,您需要设置objectequality="false".它设置$scope.$watch(data, objectequality).

我不是这个指令的专家,但请尝试:

<nvd3-multi-bar-horizontal-chart
      ...
      objectequality="false"
      ...
>
        <svg></svg>
</nvd3-multi-bar-horizontal-chart>

答案 2 :(得分:0)

您也可以使用此方法:

$timeout(function () {
  $scope.api.refresh();
}, 1);