最近在做一个echarts缩放的需求,加了dataZoom,由于老版本显示不出缩放按钮,只好选择新版本,结果新的问题出现了:原本365度无死角多条件切换的echart出现了数据叠加的问题,这样的页面有两个,以其中一个为例:
先上一段代码:
1 | function reloadEcharts(){ |
逻辑就是当点击不同按钮的时候切换不同的option进行渲染echarts

一开始点击“月度数据”按钮出现的正常的图表
再点击“累计数据”按钮出现了这样的图表

这还是大明湖畔那个容嬷嬷吗?!不对,是累计数据图表吗?
图表上明显是两组数据同时渲染在了图表上,页面上也没有任何报错(另一个页面有一个 Uncaught TypeError: Cannot use ‘in’ operator to search for ‘_ec_inner’ in undefined 的报错),查了一下报错的地方是可能是数据格式有问题,大意是如果echarts所填数据类型不是js所识别的就需要做parse(json)处理,作为对照组当前页面并没有这样的报错,但是仍出现数据切换叠加的问题,也就是说数据叠加可能跟这个报错没有任何关系,但是本着格物致知的精神,我还是把所有填数据的地方打了一遍:数据格式全部都是数组!果然没有关系!
莫非是option没有清空造成的?于是在函数中我又加了一句:option = {};
function reloadEcharts(){
var myChart = echarts.init(document.getElementById('chart'));
var option = {};
........
心想这样肯定就好了,然而并没有。。。
不死心,又在if()else()里加如下:
1 | function reloadEcharts(){ |
依然是不管用。。。。
在else里面加了alert也弹了,数据也展示了,option也首先被清空了为什么还是这样,哭五分钟继续想···
出于手贱,把else部分的内容全部清空了,上代码:
1 |
|
心想这次再点击累计数据应该是没有图表了,然而并没有,不管点击“月度数据”还是“累计数据”都显示月度数据下的图表,也就是说即使清掉了option,原有的数据依旧被保存下来了,是缓存的问题!后来从网上找到了clear()的方法(写法是:myChart.clear();),问题总算解决。
完整代码是:
1 | function reloadEcharts(){ |
解决完问题,感觉整个世界都清爽了