【问题标题】:custom filter charts in chart.jschart.js 中的自定义过滤器图表
【发布时间】:2017-07-24 09:45:55
【问题描述】:

我正在使用 chart.js 库开发一个 Web 应用程序。当用户单击图例的复选框时,我正在尝试为图表添加自定义过滤器。但是我不知道如何配置 chart.js 来调用我的自定义过滤器。

例如这里是我的应用程序的图表

然后我点击温度的复选框,温度图表被隐藏

当我点击温度的复选框时,Chart.js 调用了他的默认点击函数来过滤图表。

我已经定义了自己的过滤函数:

  public newLegendClickHandler(e, legendItem) {
let index = legendItem.datasetIndex;

let ci = this.chart;
[ci.getDatasetMeta(0),
ci.getDatasetMeta(1),
ci.getDatasetMeta(2)].forEach(function (meta) {
  meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;
});
ci.update();

}

当我点击一个复选框时,我想调用这个函数而不是 Chart.js 的默认过滤函数。

我已经阅读了 chart.js 文档“Custom On Click Actions”,但我不明白为什么 Chart.js 团队给出的示例中的 legend 属性为空。

如果您知道如何替换图例项的默认 onclick 功能,我将很高兴知道解决方案:)

提前谢谢你。

【问题讨论】:

    标签: filter chart.js legend items


    【解决方案1】:

    您可以使用图例的原生onClick事件处理方法。

    所以.. 在您的图表选项中,定义以下内容:

    options: {
       legend: {
          onClick: newLegendClickHandler
       },
       ...
    }
    

    这将覆盖图例的默认点击事件处理函数。

    ᴅᴇᴍᴏ

    var chart = new Chart(ctx, {
       type: 'line',
       data: {
          labels: ['Jan', 'Feb', 'Mar'],
          datasets: [{
             label: 'LINE',
             data: [3, 1, 4],
             backgroundColor: 'rgba(0, 119, 290, 0.2)',
             borderColor: 'rgba(0, 119, 290, 0.6)'
          }]
       },
       options: {
          legend: {
             onClick: newLegendClickHandler
          }
       }
    });
    
    function newLegendClickHandler() {
       alert('newLegendClickHandler function has been called!');
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
    <canvas id="ctx"></canvas>

    【讨论】:

    • 谢谢! onClick 属性解决了我的问题:)
    • 有没有什么办法也可以设置默认的点击行为?
    猜你喜欢
    • 1970-01-01
    • 2018-08-26
    • 2013-08-17
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多