Chart.js-多个图表的工具提示问题

时间:2018-12-17 13:10:03

标签: javascript chart.js

我使用Chart.js(在最新版本2.7中),并且如果我的页面上有多个图表,则工具提示出现问题。

在这个小提琴:https://jsfiddle.net/b4up8kw2/上,我有2个图表,但是如果您看,第一个图表的工具提示(在左侧)显示了第二个图表的值。

我使用此代码来更新图表的数据集:

var configs = [];
var charts = [];
configs['chart1'] = config;
configs['chart2'] = config;

// update chart - randomScalingFactor() return random integer
function updateChart(chart) {
  // set new values
  configs[chart].data.datasets.forEach(function(dataset) {
    dataset.data = [randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor()]
  });

  charts[chart].update();
}

$(function() {
  charts['chart1'] = new Chart($('#canvas-1')[0].getContext('2d'), configs['chart1']);
  charts['chart2'] = new Chart($('#canvas-2')[0].getContext('2d'), configs['chart2']);

  for (var key in charts) {
    updateChart(key);
  }
});

我不明白,因为我使用了2个独立的配置变量。是我的代码还是插件的错误?

1 个答案:

答案 0 :(得分:1)

我已经clone解决了每个图表的配置问题。当前,您使用一个共享的对象config渲染图表,当渲染第二个图表时,配置被更改。因此,您应该为每个图表克隆配置。

这是我的解决方案(从您的jsfiddle中进行分叉和编辑)https://jsfiddle.net/huynhsamha/bdvw1e98/

const clone = (o) => JSON.parse(JSON.stringify(o))

var configs = {
    chart1: clone(config),
    chart2: clone(config)
};

<script async src="//jsfiddle.net/huynhsamha/bdvw1e98/embed/js,html,css,result/dark/"></script>