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

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

时间2025-05-02 04:57:49分类IT科技浏览3050
导读: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
avg安全软件(avgnt.exe是安全的进程吗 avgnt是什么进程) vue格式(Vue实现简单可扩展甘特图的方法详解)