从未调用过chart.js图例标签的“filter”函数

1bqhqjot  于 2022-11-07  发布在  Chart.js
关注(0)|答案(2)|浏览(267)

如标题所示,我有一个带有图例的chart.js图表。我需要过滤各个项目,但过滤函数从未被调用。我的代码如下:

  1. var theChart = new Chart(canvas, {
  2. type: 'scatter',
  3. data: {
  4. labels: labels,
  5. datasets: datasets
  6. },
  7. options: {
  8. legend: {
  9. display: true,
  10. labels: {
  11. generateLabels: function(a) {
  12. console.log("generateLabels");
  13. },
  14. filter: function(item, chart) {
  15. console.log("filter");
  16. return false;
  17. }
  18. }
  19. }
  20. }
  21. });

generateLabels在我没有调用任何东西的情况下就被记录了,但是filter从来没有被记录过。另外,因为我返回了false,所以图例应该不会出现,但是它仍然出现了。
一把小提琴再现了这个问题:http://jsfiddle.net/7bxdwfc0/1/
我不知道为什么这个函数没有被自动调用,因为其他标签函数被自动调用了。

ds97pgxw

ds97pgxw1#

也许应该更多的是一个评论而不是一个答案,但我正在玩你的小提琴,并删除了你的cdn为chart.js从小提琴,并添加了脚本标记的cdn(2.8.0)。这实际上使过滤器函数执行,并且看起来是这样工作的,虽然散点图中连接点的线随之消失。如果你只是使用Fiddle进行开发,你可能会检查一下,或者检查您正在使用的chart.js的版本。
我从这里抓起一个:Chart.js CDN's
我可以多弹一点小提琴,把它保存起来,只是为了让你知道我在说什么。
第一个
把它放在一个代码片段中。奇怪的是,即使你有一个数据集,过滤器也会运行两次。顺便说一句,你的小提琴和你的例子不同。

egdjgwm8

egdjgwm82#

我意识到你需要把过滤器放在标签下,而不仅仅是图例,否则它就不会工作。

  1. plugins: {
  2. legend: {
  3. display: true,
  4. position: 'right',
  5. labels: {
  6. filter: function(legendItem, data) {
  7. if (legendItem.index<6) {
  8. return legendItem}
  9. //console.log(legendItem.index)
  10. }},
  11. }
  12. //display: true,
  13. //position: 'right',
  14. //font:{size:8},
  15. }
展开查看全部

相关问题