【问题标题】:Creating multiple CanvasJS charts inside <div> with ng-repeat使用 ng-repeat 在 <div> 中创建多个 CanvasJS 图表
【发布时间】:2023-03-27 18:10:01
【问题描述】:

我正在尝试在一个 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>

尝试搜索类似问题,但没有成功。

提前感谢您的时间和帮助。

【问题讨论】:

    标签: angularjs html angularjs-ng-repeat canvasjs


    【解决方案1】:

    应该注意程序的流程。它会抛出错误“未找到带有 ID 的图表”,因为图表试图在尚不存在的 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

    【讨论】:

    • 谢谢@Rishabh。在实际场景中,数据填充在控制器中,使用 $http.get 并且在视图中使用相同的:&lt;div ng-app="myApp" ng-controller="myAppController as vm"&gt; &lt;div ng-repeat="user in vm.users"&gt; &lt;div id="chartContainer{{user.Id}}" &gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; 现在在我的控制器中,虽然我已经解决了“承诺”,但当 DOM 到达这一点时仍然存在在 vm.users 中什么都不是,它无法创建 div 并给出相同的错误“找不到 ID 的图表”。非常感谢您对此的指导。谢谢。
    • 也许这又是程序流程的问题。应该以这样一种方式处理流程,即在尝试创建 div 元素之前填充控制器数据,并且在处理完这些之后,应该呈现图表。此外,这里是一个解释 CanvasJS 与 AngularJS 集成的链接:chaosm.net/blog/2014/05/29/angularjs-charts-with-canvasjs。希望对您有所帮助。
    • 感谢@Rishabh 的指导和回答我的问题。您的第一个答案解决了最初的问题。我问的第二个问题是关于程序的流程,在修复它之后,图表一切正常。干杯
    • 很高兴能帮上忙,迪帕克。
    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 2017-03-24
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多