Chart.js (v2.9.4)--如何像高版本一样支持skipNull
项目开发中,用到Chart.js展示图表,用起来也非常方便,配置很灵活,很好用,给个数据集,设置一些配置值,实例化一个Chart出来,图表就非常丝滑地展现出来了。
但是作为开发人员都知道的一个真理,永远不变的就是变化,永远无理的都是客户的需求。
很不幸,我就撞到这么一个的需求:“把那些值为0的数据集,从chart图表中移除,碍眼”。
baidu和bing这一顿疯狂搜索,好嘛,v2版本的Chart.js根本不支持这个功能,升级到高版本,也有点麻烦,因为V3以上的版本,并不是完全向前兼容。
解决问题的方法就是:Chart.js是开源的,可以看源码,通过修改代码,来满足这个需求,以下是修改源码满足需求的详细过程:
用notepad++打开v2.9.4版本的chart.js(公司现在用的就是这个版本), 最好用notepad++的jsTool插件工具格式化一下,代码有点乱。
1,定位到 4970行的computeFitCategoryTraits()函数,添加一个参数 strackCount,然后在4972行,改成var count = strackCount || ruler.stackCount; 如下图示:
2,定位到5141行的getStacks函数,添加一个dataIndex参数,然后插入5153~5158这个几行新代码,
3 定位到5179行的getStackCount函数,新增dataIndex参数,再给getStacks传递这个参数
4 定位到5191行的getStackIndex函数,新增dataIndex参数,也是同样给getStacks传递这个新增的参数
5 定位到5249行的calculateBarIndexPixels函数,
新增5296行的代码,这个skipNull的配置可以自定义到自己喜欢的配置项上,这里我是配置到了dataset集合,后面会说怎么配置。
给computeFitCategoryTraits新增stackCount函数。
给getStackIndex也新增一个参数,根据skipNull配置的值传递具体值。
6,最后再dataset配置里新增skipNull配置项
最终的效果如下:
需求是满足了,不过还有个问题,就是假如项目用的是chart.js的min压缩版,咋整,这个压缩的代码可不好改啊,不要急,chart.js开放出来的可扩展性和可自定义性,丰富到令人发指.
方法如下:
在实例化出Chart(),之前,把上面几个步骤说到那几个要改动的函数,全部复制到这里,重新实现一次,覆盖原来的, 一样可以实现想要的效果。