Chart.js.Legend不更新 第一次调用chart.update()时,图例没有更新。

问题描述 投票:0回答:1

我在chart.js中更新图例时遇到了麻烦。

这里有一个沙盘,可以跟大家分享一下。

我有一个标准的条形图,每个标签有两个数据点,如。

let chartData = {
  apple: {
    a: 1,
    b: 3
  },
  orange: {
    a: 2,
    b: 2
  },
  banana: {
    a: 3,
    b: 1
  }
};

Example Bar Chart

点击按钮时,排序从a->b或相反。

在点击按钮时,排序由a->b或反过来。变色 这就是我的问题所在。

GIF of bar chart toggle

图例在第一次切换时没有更新。之后,它总是落后于一次切换。

我试着研究如何在图例中明确设置颜色,这样我就可以直接在 updateChart() 函数,但在文档中我只看到了改变字体颜色和图例本身的功能,而没有看到单个标签的颜色。

我希望不需要使用自定义CSS来覆盖...... 这是Chart.js中的一个错误吗?我是不是执行更新的方式不正确?我必须调用generateLegend()吗?

非常感谢你的帮助

chart.js
1个回答
0
投票

这是因为你的 labels 最初并没有进行排序。如果您在将数据分配给 sortedKeys,它将按预期工作。

let sortedKeys = Object.keys(chartData).sort(
  (a, b) => chartData[b][sortByCol] - chartData[a][sortByCol]
);

请看一下您修改后的 代码沙盒.


0
投票

问题是chart.js中的一个bug。

https:/github.comchartjsChart.jsissues7457。

chart.js的创建者Evert Timberg回复了两个可能的修复方法。

  1. 更新到v3.0.0-alpha版本,其中的bug已经被修复。

  2. 调用chart.update()两次(可能会有性能问题)


两种解决方案都已确认。

v3是alpha版本,有一些突破性的变化--所以从2.x -> 3.x的迁移可能需要一些工作。

调用chart.update()两次当然会造成一些性能开销,但在像这样的小例子上,它一点也不明显。

感谢 chart.js 的 @etimberg 的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.