使用ng-repeat在<div>中创建多个CanvasJS图表

时间:2016-02-29 04:09:43

标签: angularjs html5 angularjs-ng-repeat canvasjs

我正在尝试在div中创建多个CanvasJS图表。

div需要来自控制器的数据数组,通过它循环(使用ng-repeat)并在各种控件中显示数据。

现在,当我尝试将CanvasJS图表放入此div时,图表不会呈现,我看到的错误是“找不到带有id的图表”

但同样的图表在这个div之外运作良好。

示例代码: http://jsfiddle.net/DTheWebDev/mozfsxpc/7/

APP.JS

var m = {
  "India": "2",
  "Australia": "3"
};

function MyCtrl($scope) {
  $scope.items = m;
}
var dps = [{
  x: 1,
  y: 10
}]; //dataPoints. 

var chart = new CanvasJS.Chart("chartContainer", {
  title: {
    text: "Live Data"
  },
  axisX: {
    title: "Axis X Title"
  },
  axisY: {
    title: "Units"
  },
  data: [{
    type: "line",
    dataPoints: dps
  }]
});

chart.render();
var xVal = dps.length - 1;
var yVal = 15;
var updateInterval = 1000;

var updateChart = function() {
  yVal = yVal + Math.round(5 + Math.random() * (-5 - 5));
  dps.push({
    x: xVal,
    y: yVal
  });
  xVal--;
  chart.render();

};
setInterval(function() {
  updateChart()
}, updateInterval);

HTML:

<h3>Match Summary:</h3>

<div ng-app ng-controller="MyCtrl">
  <div ng-repeat="(country,goals) in items">
    <div id="chartContainer" style="height: 200px; width: 100%;"></div>
    <h2>{{country}}: {{goals}} </h2>
  </div>
</div>

尝试搜索类似的问题,但没有运气。

感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:4)

应该注意程序的流程。它会引发错误&#39;找不到包含ID的图表&#39;因为图表试图在一个尚未存在的div元素上呈现。 此外,不同div元素的id应该是不同的。 您可以使用与此类似的代码来附加动态ID。

<div ng-repeat="(country,goals) in items"> 
    <div id="chartContainer-{{country}}" style="height: 200px; width: 100%;"></div>
<h2>{{country}}: {{goals}} </h2>
</div>

这是工作jsfiddle