Angularjs:需要帮助制作 c3 指令以动态地重新加载数据和更改图表类型

Angulrjs : need to help to make c3 direectives to reload data and changing chart types dynamically

我在使用 c3 指令重新加载数据和更改图表显示类型时遇到问题。请在 http://plnkr.co/edit/wWJx3zU3Sm1cN9ZCtvoh?p=preview.

查看我的 plunker

为了重新加载数据,我使用了 $scope.refreshInData 函数,为了更改图表类型,我使用了 $scope.transform 函数。但不知何故,这些都不起作用。从 Github 上给出的示例中,我尝试使用转换函数来更改图表类型,但我无法使其工作。请任何帮助...

$scope.transform = function(filterSelected, preChartName) {
    alert('inside change Chart  ' + preChartName);
    c3SimpleService['#' + preChartName].transform(filterSelected, filterSelected);
    //  preChartName.load({ data.type : filterSelected });

}

C3 transform() 可以带一个参数,在你的情况下 - 它应该。

如果是 $scope.transform 你应该这样使用它:

c3SimpleService['#' + preChartName].transform(filterSelected.value);

注意两件事:

  1. transform 有 1 个参数,它是字符串 - 图表类型的名称
  2. 您传递的是对象,因此您必须访问其 字段

至于$scope.refreshInData()问题略有不同。在这里你唯一需要解决的是不是直接用它的 ID 来抓取图表,而是通过 c3SimpleService 服务。这将允许通过 AngularJS 层访问:

c3SimpleService['#' + preChartName].load({ columns : cityData });

您可以在 Plnkr

中看到它正在运行

您需要设置一个范围变量,例如:isChart 其值 true/false。您可以将此范围用于您的 ng-if 条件。在每个 request/change 上,您需要在请求成功后将其更改为 true。并且您还需要在每个 change/request 上重置图形数据数组。它工作得很好。