首页IT科技关于echarts(关于echarts 清空上一次加载的数据问题)

关于echarts(关于echarts 清空上一次加载的数据问题)

时间2025-06-20 17:24:23分类IT科技浏览3792
导读:echarts 清空上一次加载的数据 目标效果及数据格式...

echarts 清空上一次加载的数据

目标效果及数据格式

echarts目标链接

后台数据格式

Json中List类型             ,并遍历List中的对象

for(var i in sigleRow) { chargingPowerList.push(sigleRow[i].chargingPower); drivingMileageList.push(sigleRow[i].drivingMileage); numList.push(sigleRow[i].num); }

转化后格式:

myChart.setOption(option,true)

series虽然是[] 数组                  ,但是任然会保留上次查询所得结果      ,使用myChart.setOption(option,true)语句可以更新页面效果

如果这种方式没有解决          ,可以参考下文                  ,使用setOption

最终效果

完整代码如下:

countCollum(flag){ var ydata = {}; var linename = { xname:, yname: }; let lengendName = [];// echart legend let chargingPowerObj = [],drivingMileageObj = [],numObj = []; this.listData.forEach((element,index) => { lengendName.push(element.carName); var sigleRow = eval(element.workVehicleStatisticsList); let chargingPowerList = []; let drivingMileageList = []; let numList = []; for(var i in sigleRow) { chargingPowerList.push(sigleRow[i].chargingPower); drivingMileageList.push(sigleRow[i].drivingMileage); numList.push(sigleRow[i].num); } chargingPowerObj.push(chargingPowerList); drivingMileageObj.push(drivingMileageList); numObj.push(numList); }); console.log(element-11-,chargingPowerObj,drivingMileageObj) if(flag == countnum){ ydata = numObj; linename.xname = 统计时间; linename.yname = 次数/次; this.moveCarCountLine(numObj,linename,lengendName); }else if(flag == countkwh){ this.fiveOpera = ; linename.xname = 统计时间; linename.yname = 电量/度; ydata = chargingPowerObj; this.moveCarCountLine(chargingPowerObj,linename,lengendName); }else if(flag == countkm){ this.fiveOpera = ; linename.xname = 统计时间; linename.yname = 里程/公里; this.moveCarCountLine(drivingMileageObj,linename,lengendName); }else{ ydata = []; } chargingPowerObj = []; drivingMileageObj = []; numObj = []; }, moveCarCountLine( ydata, linename,lengendName) { let _this = this; var moveCarCount = _this.$echarts.init(document.getElementById("moveCarCountInfoId")); var areaChargeOpt = { tooltip : { trigger: axis, axisPointer : { // 坐标轴指示器         ,坐标轴触发有效 type : shadow // 默认为直线       ,可选为:line | shadow } }, legend: { data: lengendName }, grid: { left: 3%, right: 4%, bottom: 3%, containLabel: true }, yAxis: { type: value }, xAxis: { type: category, data: _this.xzhouname }, series: _this.seriesData(ydata,lengendName) }; moveCarCount.setOption(areaChargeOpt,true); }, seriesData( ydata, lengendName){ console.log(seriesData, ydata,lengendName) var series = []; ydata.forEach((element,index) => { console.log(seriesDataelement,element) let item = { name: lengendName[index], type: bar, stack: 总量, label: { normal: { show: true, position: insideRight } }, data: ydata[index] } series.push(item); }) console.log(seriesDataseriesData,series) return series; },

Echarts清空图表:There is a chart instance already initialized on the dom.

有一个关于dom的图表实例已初始化

我们在使用图表的时候                  ,常用的使用场景就是数据展示             。

我们自然希望            ,数据的改变会带来图表的重绘                  。

也就是说    ,指定的区域作为canvas容器                   ,根据触发条件改动数据之后               ,依旧沿用之前的的图表配置,把图表重新生成      。

重绘图表时                ,我们要把之前已经渲染好的图表清空          。

Echarts提供的有clear()和dispose()方法                  。

另外还有js方法         。

先说我用着无效的两个

①js:

let ele=element.getElementById(元素id); ele.innerHTML=

这是把canvas元素的内容清空                  ,视觉效果上   ,确实实现了清空       。

但是canvas实例依旧存在             ,控制台就会出现上面的问题:There is a chart instance already initialized on the dom.

②clear()方法

let ele=element.getElementById(元素id) ele.clear()

官方解释是:

清空当前实例                  ,会移除实例中所有的组件和图表                  。

看定义我是觉得能实现需求的      ,但实际用的时候效果不尽人意            。

注:这里我也查找了很多资料          ,来佐证方法的适用性    。有的朋友记录该方法确实可用                  ,但是有的就和我一样         ,没有作用                   。

不过       ,可能是使用方法的位置不正确                  ,导致方法没有合适的被使用也说不一定               。

以上是问题记录            ,接下来说一下解决方案吧。

dispose()方法:

销毁实例    ,实例销毁后无法再被使用                。

实话讲                   ,看见官方的这个解释               ,我在最初的时候根本没考虑用它                  。

原因就是销毁二字,我想当然                ,图表我还需要用                  ,你销毁再用的时候怎么获取呢?

后来其他方案确实没办法解决已初始化的问题   ,我又看了一下自己使用图表的方法:

let chart = echarts.init(this.$refs.chart);

init()!!!

创建一个 ECharts 实例             ,返回 echartsInstance                  ,不能在单个容器上初始化多个 ECharts 实例   。

所以切换数据      ,显示不同图表的过程其实也就是 ECharts 实例的销毁—创建过程             。

自然而然          ,想到dispose()销毁方法                  ,可问题是我们什么时候使用呢?

能销毁肯定需要先存在         ,所以定义一个全局变量来存储创建后的ECharts 实例       ,在改变数据需要重新绘制图表的时候加上条件判断:图例是否存在来决定是否销毁                  。

所以呢:

我在data里定义:

chart: null,//接收实例对象

触发切换数据的方法里面:

if (this.chart != null && this.chart != && this.chart != undefined) {    this.chart.dispose(); //销毁 }

嘎嘎好用!

不过我在想                  ,上面clear()方法没用            ,或许是实例没保存    ,触发时机不对      。

按照正确的处理思路                   ,dispose()换成clear()可能也好用          。(有时间我试一下               ,再来更新)

以上为个人经验,希望能给大家一个参考                ,也希望大家多多支持本站                  。

声明:本站所有文章                  ,如无特殊说明或标注   ,均为本站原创发布         。任何个人或组织             ,在未征得本站同意时                  ,禁止复制            、盗用                   、采集      、发布本站内容到任何网站         、书籍等各类媒体平台       。如若本站内容侵犯了原著者的合法权益      ,可联系我们进行处理                  。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
苹果cms采集接口jsui(苹果CMSV10官方采集站——给您全新的网站建设体验)