图例标签隐藏时Chart.js是否更新图表?

rryofs0p  于 2023-01-13  发布在  Chart.js
关注(0)|答案(1)|浏览(168)

Chart.js3-我有一个圆环图,其中有一个图例,该图例带有一个generateLabels函数,该函数可以根据图形颜色更改文本颜色。

plugins: {
          legend: {
            labels: {
              generateLabels: (chart) => {
                if (chart.data.labels.length && chart.data.datasets.length) {
                  return chart.data.labels.map((label, i) => ({
                    text: label,
                    fontColor: chart.data.datasets[0].backgroundColor[i],
                    fillStyle: chart.data.datasets[0].backgroundColor[i],
                    strokeStyle: '#fff',
                    hidden: myChart ? myChart.getDatasetMeta(0).data[i].hidden : false
                  }));
                }
              },
            },

然而,我需要图表更新,就像它使用它的默认行为,并折叠图表中的数据,如果图例项是“隐藏”。我可以手动完成,但它与硬编码值:

...
            onClick: (event, legendItem) => {
              const metaData = myChart.getDatasetMeta(0).data;
              const iData = labs.indexOf(legendItem.text);
              metaData[iData].hidden ? myChart.datasets[0].data[iData] = 0 : 
                  myChart.data.datasets[0].data[iData] = 1;
              metaData[iData].hidden = !metaData[iData].hidden;
              myChart.update();
            },

当图例项带有删除线且处于“隐藏”状态时,如何获得图表更新的原始行为?

lymnna71

lymnna711#

我知道这是晚了,但我希望这也将有助于其他开发人员。
我也遇到过这个问题,我发现每次您尝试单击图例时,generateLabels的回调也会执行。
因此,您需要在第一次生成之后使用图表的现有legendItems,以避免覆盖属性。

plugins: {
          legend: {
            labels: {
              generateLabels: (chart) => {
                if (chart.data.labels.length && chart.data.datasets.length) {
                  return chart.legend.legendItems ?? chart.data.labels.map((label, i) => ({
                    text: label,
                    fontColor: chart.data.datasets[0].backgroundColor[i],
                    fillStyle: chart.data.datasets[0].backgroundColor[i],
                    strokeStyle: '#fff',
                    hidden: myChart ? myChart.getDatasetMeta(0).data[i].hidden : false
                  }));
                }
              },
            },

相关问题