echarts的初始化和销毁dispose
容器节点被销毁以及被重建时
假设页面中存在多个标签页,
每个标签页都包含一些图表。
当选中一个标签页的时候,其他标签页的内容在 DOM 中被移除了。
这样,当用户再选中这些标签页的时候,就会发现图表“不见”了。
本质上,这是由于图表的容器节点被移除导致的。
即使之后该节点被重新添加,图表所在的节点也已经不存在了。
正确的做法是,
在图表容器被销毁之后,
调用 echartsInstance.dispose 销毁实例,
在图表容器重新被添加后再次调用 echarts.init 初始化。
从上面这一句话,我们可以得出一个结论:
那就是有些时候我们在移除容器的时候,echarts可能展示不出来
那么解决的办法是:
调用 echartsInstance.dispose 销毁实例,
echartsInstance.dispose的使用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>第一个 ECharts 实例</title>
<!-- 引入 echarts.js -->
<script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
</head>
<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 800px;height:400px; background: pink;"></div>
<div onclick="showHander()" class="zahsnhi">展示实例</div>
<div onclick="desHander()" class="xiaohui">销毁实例</div>
<script type="text/javascript">
// 初始化echarts
function xuanranInt() {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
let index = 0;
var colorList = ['#73DDFF', '#73ACFF', '#FDD56A', '#FDB36A', '#FD866A', '#9E87FF', '#58D5FF'];
var data = [{
'name': '热点网格',
'value': 5600
}, {
'name': '大气污染',
'value': 3600
}, {
'name': '水质超标',
'value': 1500
}, {
'name': '在线超标',
'value': 2000
}, {
'name': '未知',
'value': 899
}, {
'name': '系统对接',
'value': 4000
}]
option = {
title: {
text: 'PieChart',
x: 'center',
y: 'center',
textStyle: {
fontSize: 20
}
},
tooltip: {
trigger: 'item'
},
legend: {
type: 'scroll',
orient: 'vertical',
right: '5%',
top: 'center',
selectedMode: true,
icon: 'pin',
formatter: function (name) {
let title = ''
var total = 0;
var target;
var index;
for (var i = 0, l = data.length; i < l; i++) {
if (data[i].name == name) {
target = data[i].value;
title = data[i].label
index = i < 6 ? i : 5
}
}
return ` ${name} ${index} ${target}个`
}
},
label: { //去除饼图的指示折线label
normal: {
show: false,
position: 'inside',
formatter: "{b}:{d}%"
},
},
series: [{
type: 'pie',
center: ['50%', '50%'],
radius: ['50%', '70%'],
clockwise: true,
avoidLabelOverlap: true,
hoverOffset: 30,
emphasis: {
itemStyle: {
borderColor: '#f3f3f3',
borderWidth: 10
}
},
itemStyle: {
normal: {
borderColor: "#FFFFFF",
borderWidth: 1,
label: {
show: false,
},
labelLine: {
show: false
}
}
},
data: data,
}]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
}
// 调用
xuanranInt();
// 重新渲染echarts
function showHander() {
xuanranInt();
}
// 销毁实例
function desHander() {
var myChart = echarts.init(document.getElementById('main'));
// 销毁实例,销毁后实例无法再被使用。
// 在什么情况下需要调用该函数进行销毁当前的实例呢?
// 官方给的说明:在图表容器被销毁之后,调用 echartsInstance.dispose 销毁实例,
myChart.dispose();
}
</script>
</body>
</html>
效果图

echartsInstance.clear的使用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>第一个 ECharts 实例</title>
<!-- 引入 echarts.js -->
<script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
</head>
<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 800px;height:400px; background: pink;"></div>
<div onclick="showHander()">展示实例</div>
<div onclick="desHander()">销毁实例</div>
<div onclick="qingkong()">清空当前实例</div>
<script type="text/javascript">
// 初始化echarts
function xuanranInt(){
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
let index = 0;
var colorList = ['#73DDFF', '#73ACFF', '#FDD56A', '#FDB36A', '#FD866A', '#9E87FF', '#58D5FF'];
var data = [{
'name': '热点网格',
'value': 5600
}, {
'name': '大气污染',
'value': 3600
}, {
'name': '水质超标',
'value': 1500
}, {
'name': '在线超标',
'value': 2000
}, {
'name': '未知',
'value': 899
}, {
'name': '系统对接',
'value': 4000
}]
option = {
title: {
text: 'PieChart',
x: 'center',
y: 'center',
textStyle: {
fontSize: 20
}
},
tooltip: {
trigger: 'item'
},
legend: {
type: 'scroll',
orient: 'vertical',
right: '5%',
top: 'center',
selectedMode: true,
icon: 'pin',
formatter: function (name) {
let title = ''
var total = 0;
var target;
var index;
for (var i = 0, l = data.length; i < l; i++) {
if (data[i].name == name) {
target = data[i].value;
title = data[i].label
index = i < 6 ? i : 5
}
}
return ` ${name} ${index} ${target}个`
}
},
label: { //去除饼图的指示折线label
normal: {
show: false,
position: 'inside',
formatter: "{b}:{d}%"
},
},
series: [{
type: 'pie',
center: ['50%', '50%'],
radius: ['50%', '70%'],
clockwise: true,
avoidLabelOverlap: true,
hoverOffset: 30,
emphasis: {
itemStyle: {
borderColor: '#f3f3f3',
borderWidth: 10
}
},
itemStyle: {
normal: {
borderColor: "#FFFFFF",
borderWidth: 1,
label: {
show: false,
},
labelLine: {
show: false
}
}
},
data: data,
}]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
}
// 调用
xuanranInt();
// 重新渲染echarts
function showHander(){
xuanranInt();
}
// 销毁实例
function desHander(){
var myChart = echarts.init(document.getElementById('main'));
// 销毁实例,销毁后实例无法再被使用。
// 在什么情况下需要调用该函数进行销毁当前的实例呢?
// 官方给的说明:在图表容器被销毁之后,调用 echartsInstance.dispose 销毁实例,
myChart.dispose();
}
// 清空当前实例
function qingkong(){
// 清空当前实例,会移除实例中所有的组件和图表。
var myChart = echarts.init(document.getElementById('main'));
myChart.clear()
}
</script>
</body>
</html>

clear和dispose的区别在哪里呢?
学过vue的同学都知道,v-show和v-if
其实clear类似于v-show
dispose类似于v-if
他们的区别就是这样
echarts的初始化和销毁dispose的更多相关文章
- Spring实现初始化和销毁bean之前进行的操作,三种方式
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...
- Spring源码学习之: 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...
- Spring bean 实现初始化、销毁方法的方式及顺序
Spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作,常用方法有三种: 使用注解,在指定方法上加上@PostConstruct或@PreDestroy注解来制定该方法是在初始化之后还是 ...
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...
- 在spring容器中定义初始化和销毁bean前所做的操作,有三种方式
1.使用注解,通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 package com.luoq.test.annotation.init; ...
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...
- spring实战三装配bean之Bean的作用域以及初始化和销毁Bean
1.Bean的作用域 所有的spring bean默认都是单例.当容器分配一个Bean时,不论是通过装配还是调用容器的getBean()方法,它总是返回Bean的同一个实例.有时候需要每次请求时都获得 ...
- 三种不同实现初始化和销毁bean之前进行的操作的比较
Spring容器中的bean是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下三种: 通过实现 InitializingBean/ ...
- Spring3实战第二章第一小节 Spring bean的初始化和销毁三种方式及优先级
Spring bean的初始化和销毁有三种方式 通过实现 InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法: 优先级第二通过 <bean& ...
- FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
随机推荐
- 大力出奇迹,揭秘昇腾CANN的AI超能力
摘要:CANN(Compute Architecture for Neural Networks)异构计算架构,是以提升用户开发效率和释放昇腾AI处理器极致算力为目标,专门面向AI场景的异构计算架构. ...
- 再谈BOM和DOM(1):BOM与DOM概述
JavaScript的实现包括以下3个部分: ECMAScript(核心):描述了JS的语法和基本对象. 浏览器对象模型(BOM):与浏览器交互的方法和接口 文档对象模型 (DOM):处理网页内容的方 ...
- Google 发布:DevOps 2022现状报告
在过去的八年中,全球超过 33,000 名专业人士参与了Accelerate State of DevOps 调查,使其成为同类研究中规模最大.运行时间最长的一项.Accelerate State o ...
- EasyUI DataGrid 没有数据
//判断后台返回数据是否没数据,没数据DataGrid添加一行 $(this).datagrid('appendRow', { itemid: '<div style="text-al ...
- 视频云AI时代,穿越市场第一,想象更多
国际权威数据公司IDC发布<中国视频云市场跟踪(2023 H1)>报告:自2018年至今,阿里云持续保持中国视频云整体市场第一,整体市场占比达24.4%. 01 第一之外,低谷之上 近期, ...
- VMware Workstation centos7 虚拟机桥接方式联网,获取动态IP
在VMware中安装 Centos7 虚拟机,日常需要带着电脑外出.因此在远程连接虚拟机时,就要求与宿主机在同一网段.在不修改路由器的情况下,让宿主与centos7都动态从路由器获取IP地址,就能解决 ...
- OS | 进程和线程基础知识全家桶图文详解✨
前言 先来看看一则小故事 我们写好的一行行代码,为了让其工作起来,我们还得把它送进城(进程)里,那既然进了城里,那肯定不能胡作非为了. 城里人有城里人的规矩,城中有个专门管辖你们的城管(操作系统),人 ...
- Codeforces 189 A. Cut Ribbon(DP 恰装满的完全背包问题)
题目链接 Polycarpus has a ribbon, its length is n. He wants to cut the ribbon in a way that fulfils the ...
- 体验函数计算 FC 3.0,写测评赢取索尼头戴式耳机
11月1日云栖大会,函数计算3.0全新升级,相对函数计算2.0,3.0版本突出易用性.高弹性,并且可以和更多阿里云服务无缝集成.业内首发神龙 Serverless GPU 架构,冷启动大幅优化,全链路 ...
- 介绍几种OPTIONS检测的方法
概述 日常的VOIP开发中,OPTIONS检测是常用的网络状态检测工具. OPTIONS原本是作为获取对方能力的消息,也可以检测当前服务状态.正常情况下,UAS收到OPTIONS心跳,直接回复200即 ...