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

Angularjs Angulrjs:需要帮助制作c3指令来重新加载数据和动态更改图表类型,angularjs,angularjs-directive,c3.js,Angularjs,Angularjs Directive,C3.js,我面临c3指令重新加载数据和更改图表显示类型的问题。请看我的扑克牌 对于重新加载数据,我使用$scope.refreshInData函数,对于更改图表类型,我使用$scope.transform函数。但不知何故,这些都不起作用。在Github上的给定示例中,我尝试使用transform函数来更改图表类型,但无法使其正常工作。需要帮忙吗 $scope.transform = function(filterSelected, preChartName) { alert('inside cha

我面临c3指令重新加载数据和更改图表显示类型的问题。请看我的扑克牌

对于重新加载数据,我使用
$scope.refreshInData
函数,对于更改图表类型,我使用
$scope.transform
函数。但不知何故,这些都不起作用。在Github上的给定示例中,我尝试使用transform函数来更改图表类型,但无法使其正常工作。需要帮忙吗

$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);
注意两件事:

  • transform接受1个参数,它是图表类型的字符串名称
  • 您传递的是对象,因此必须访问其字段
  • 至于$scope.refreshInData()问题则略有不同。这里唯一需要解决的问题是抓取图表,而不是直接使用它的ID,而是通过c3SimpleService服务。这将允许通过AngularJS层进行访问:

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

    您可以看到它在

    中工作。您需要设置一个范围变量,如:isChart its value true/false。您可以在ng if条件中使用此范围。在每个请求/更改中,您需要在请求成功后更改其false,使其成为true。此外,您还需要在每次更改/请求时重置图形数据数组。它工作得非常完美。

    谢谢Wasil,但我注意到refreshInData函数有一个问题。当我更改下拉列表时,即使新数据正在加载(dR、yu、iyt),但旧数据(FedEx、UPS、DHL)也保持不变。即使是旧的标签(联邦快递、UPS和DHL)也保持原样。加载新数据时,所有旧数据和标签都应替换为新数据和标签,如何实现?我的意思是,只有在下拉更改时,图表才应使用新数据生成。请尝试使用C3.js中的unload()方法。它允许您在加载新数据系列时卸载特定数据系列,即“DHL”。还提供了一个完美的示例。接受答案。谢谢