微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么针对ChartJS的此Tooltip回调有效,而无效

如何解决为什么针对ChartJS的此Tooltip回调有效,而无效

我试图进行回调以绘制我的工具提示。我在这里尝试此代码,但没有用:

tooltips: {
    callbacks: {
        labelColor : function(tooltipItem,chartInstance){
            return {
                    backgroundColor : data.datasets[tooltipItem.datasetIndex].backgroundColor,borderColor : data.datasets[tooltipItem.datasetIndex].backgroundColor
            };
        }
    }
}

直到我发现我需要这样做:

tooltips: {
    callbacks: {
        labelColor: function(tooltipItem,chart) {
            return {
                backgroundColor : chart.config.data.datasets[tooltipItem.datasetIndex].backgroundColor,borderColor : chart.config.data.datasets[tooltipItem.datasetIndex].backgroundColor
            }
        }
    }
}

所以区别是我尝试访问这种颜色:

data.datasets[tooltipItem.datasetIndex].backgroundColor

正确答案的访问方式如下:

chart.config.data.datasets[tooltipItem.datasetIndex].backgroundColor

我很困惑,因为我已经编辑了工具提示标题和图例,访问了没有'chart.config'的数据集。

这有效:

tooltips: {
   callbacks: {
       title: (tooltipItems,data) => data.labels[tooltipItems[0].index],label: (tooltipItems,data) => data.datasets[tooltipItems.datasetIndex].label + ': ' + tooltipItems.value + '%'
  }                 
}

所以为什么在一种情况下我可以使用 data.datasets [tooltipItem.datasetIndex] 访问数据,而另一种情况需要 chart.config.data.datasets [tooltipItem.datasetIndex]

解决方法

您的第一个代码段也可以使用

tooltips: {
    callbacks: {
        labelColor : function(tooltipItem,chartInstance){
            return {
                    backgroundColor : data.datasets[tooltipItem.datasetIndex].backgroundColor,borderColor : data.datasets[tooltipItem.datasetIndex].backgroundColor
            };
        }
    }
}

此处labelColor的回调函数有两个参数。第二个参数chartInstance包含您需要的数据和其他属性,但是您尝试访问data.datasets而不是chartInstance.data.datasets

查看此示例代码段。

var ctx = document.getElementById('myChart').getContext('2d');
var chart = new Chart(ctx,{
  // The type of chart we want to create
  type: 'line',// The data for our dataset
  data: {
    labels: ['January','February','March','April','May','June','July'],datasets: [{
      label: 'My First dataset',backgroundColor: 'rgb(255,99,132)',borderColor: 'rgb(255,data: [0,10,5,2,20,30,45]
    }]
  },// Configuration options go here
  options: {
    tooltips: {
      callbacks: {
        labelColor: function(tooltipItem,chartInstance) {
          debugger;
          return {
            backgroundColor: chartInstance.data.datasets[tooltipItem.datasetIndex].backgroundColor,borderColor: chartInstance.data.datasets[tooltipItem.datasetIndex].backgroundColor
          };
        },label: function(tooltipItem,data) {
          var label = data.datasets[tooltipItem.datasetIndex].label || '';

          if (label) {
            label += ': ';
          }
          label += Math.round(tooltipItem.yLabel * 100) / 100;
          label += ' custom'
          return label;
        }
      }
    }

  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<canvas id="myChart"></canvas>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。