echarts图表自适应和其他问题

1.使用 eCharts 提供的 resize()方法,监听图表容器的大小并改变图表大小

// 监听 resize 事件
window.addEventListener("resize", function () {this.chart.resize();
});

 

报错如下:
Uncaught TypeError: Cannot read properties of undefined (reading 'resize')

解决:
主要是 this 指向的问题,换成箭头函数即可解决:

window.addEventListener("resize", () => {this.chart.resize();
});

 

报错二:
TypeError: Cannot read properties of undefined (reading 'getAttribute')
解决: 1.主要原因是离开当前页面没有清除自适应事件:

 

destroyed () {window.removeEventListener('resize', this.chart)
},

2.如果清除自适应事件还是报错,原因就是 dom 元素没有准备完毕,echarts 渲染数据与 dom 元素异步问题

2.echarts 图表无数据时展示”暂无数据”

<div id="test_chart" style="width: 600px;height:400px;"></div>;let chartData = [5, 20, 36, 10, 10, 20];
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById("test_chart"));
var option;
// 指定图表的配置项和数据
if (chartData.length == 0) {//暂无数据option = {title: {text: "暂无数据",x: "center",y: "center",textStyle: {fontSize: 14,fontWeight: "normal",},},};
} else {option = {title: {text: "ECharts 入门示例",},tooltip: {},legend: {data: ["销量"],},xAxis: {data: ["衬衫", "羊毛衫"],},yAxis: {},series: [{name: "销量",type: "bar",data: chartData, //动态数据},],};
}
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);

 

3.vue 使用 element-resize-detector 监听元素宽度变化来实现 echarts 的自适应

原文:vue使用element-resize-detector监听元素宽度变化来实现echarts的自适应_vue 项目echart 监听元素宽度变化自适应-CSDN博客
当我们切换左侧菜单展示效果的时候,右侧内容会对应变宽,但此时的 echarts 并不能执行自适应效果,这是因为切换菜单展示效果并没有触发 window.onresize,所以为解决类似此问题,我们可使用 element-resize-detector。

 

npm install element-resize-detector --save

创建文件 chartResize.js

import echarts from "echarts";
import Vue from "vue";
import elementResizeDetectorMaker from "element-resize-detector";export var version = "0.0.1";
var compatible = /^2\./.test(Vue.version);
if (!compatible) {Vue.util.warn("vue echarts resize directive " +version +" only supports Vue 2.x, and does not support Vue " +Vue.version);
}
let HANDLER = "_vue_echarts_resize_handler";function bind(el) {unbind(el);el[HANDLER] = function () {let chart = echarts.getInstanceByDom(el);if (!chart) {return;}chart.resize();};//监听window窗体变化,更新echarts大小//window.addEventListener("resize", el[HANDLER])//监听绑定的div大小变化,更新echarts大小elementResizeDetectorMaker().listenTo(el, el[HANDLER]);
}
function unbind(el) {//window.removeEventListener("resize", el[HANDLER]);elementResizeDetectorMaker().removeListener(el, el[HANDLER]);delete el[HANDLER];
}
var directive = {bind: bind,unbind: unbind,
};
Vue.directive("on-echart-resize", directive);

 

在页面中使用

<template><div><div id="contentShow" ref="lineChart" v-on-echart-resize></div></div>
</template>
<script>
import "../../../utils/chartResize";
export default {data() {return {};},mounted() {const elementResizeDetectorMaker = require("element-resize-detector");let erd = elementResizeDetectorMaker();erd.listenTo(this.$refs.lineChart, () => {this.$nextTick(function () {const lineChart = this.$echarts.init(this.$refs.lineChart);//使echarts尺寸重置lineChart.resize();});});},methods: {},
};
</script>
<style scoped></style>

 

4.[ECharts] There is a chart instance already initialized on the dom.

原因:在同一个页面使用一个 echarts,重复创建

let myChart: any;
// 获取dom
let main: any = document.getElementById("myChart");
// 获取 dom 容器上的实例。
let existInstance = echarts.getInstanceByDom(main);
// 判断是否有实例
if (existInstance) {if (true) {// 销毁echarts.dispose(existInstance);}
}
// 重新创建
myChart = echarts.init(main);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/772029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经验篇04-为什么学了很多知识/读了很多书却没用

前言 以下内容是参加古典老师的写作训练营&#xff0c;古典老师分享的视频课程&#xff0c;对于喜欢阅读或者学习的人来说&#xff0c;可以揭开【学了很多东西却没用】这个问题的神秘面纱&#xff0c;我个人收获非常大&#xff0c;结合了一些自己的理解&#xff0c;形成此文&am…

数据链路层(四):数据链路层协议

目录 1 数据链路层协议1.1 异步协议1.2 同步协议1.3 局域网数据链路层协议1.4 广域网数据链路层协议 1 数据链路层协议 数据链路层“协议”也称为“规程”&#xff0c;数据链路控制协议也称数据链路控制规程。 数据链路控制协议主要分为异步协议和同步协议两大类。 1.1 异步协…

java常用IO流功能——字符流和缓冲流概述

前言&#xff1a; 整理下学习笔记&#xff0c;打好基础&#xff0c;daydayup! 之前说了下了IO流的概念&#xff0c;并整理了字节流&#xff0c;有需要的可以看这篇 java常用应用程序编程接口&#xff08;API&#xff09;——IO流概述及字节流的使用 字符流 FileReader(文件字…

leetcode 1218.最长定差子序列

思路&#xff1a;动态规划。 其实这道题和最长递增子序列很像&#xff0c;都是以数字为结尾的dp形式&#xff0c;也就是把判断条件改了一下就是了。 这里首先我们用二重循环来做一下&#xff0c;发现会时间超时&#xff0c;因为这里的时间数是大于10万的&#xff0c;所以要么…

docker 共享内存不足问题

在启动容器时增加共享内存大小&#xff1a; 您可以通过在docker run命令中添加--shm-size参数来指定更大的共享内存大小。例如&#xff0c;如果您需要32GB的共享内存&#xff0c;可以这样做&#xff1a; docker run --shm-size32g -it your-docker-image 这里的your-docker-im…

SAP Fiori开发中的JavaScript基础知识2 - 变量,操作符,值,类型

1. JavaScript代码示例 在介绍JavaScript具体语法前&#xff0c;让我们先看一段在Web应用程序过程中的JS代码片。 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>First JavaScript Application!</title><scr…

webpack proxy工作原理?为什么能解决跨域?

一、是什么 webpack proxy&#xff0c;即webpack提供的代理服务 基本行为就是接收客户端发送的请求后转发给其他服务器 其目的是为了便于开发者在开发模式下解决跨域问题&#xff08;浏览器安全策略限制&#xff09; 想要实现代理首先需要一个中间服务器&#xff0c;webpac…

代码随想录算法训练营Day35|LC860 柠檬水找零LC406 根据身高重建队列LC452 用最少数量的箭引爆气球

一句话总结&#xff1a;身高队列看起来不简单&#xff0c;实际上也很难。 原题链接&#xff1a;860 柠檬水找零 简单贪心思想即可。5元时加入cnt5&#xff0c;10元时cnt10&#xff0c;cnt5--&#xff0c; 20元时则优先找零10元再找零5元&#xff0c;这样最后判断是否在一次找零…

超全整理,软件测试-性能测试流程汇总,看这一篇就够了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试&#xf…

Redis 教程系列之Redis 客户端连接(八)

Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接&#xff0c;当一个连接建立后&#xff0c;Redis 内部会进行以下一些操作&#xff1a; 首先&#xff0c;客户端 socket 会被设置为非阻塞模式&#xff0c;因为 Redis 在网络事件处理上采用的是非阻塞…

2024年蓝牙耳机怎么选?五大爆火真无线蓝牙耳机推荐大公开!

​随着科技的进步&#xff0c;越来越多的用户倾向选择无线蓝牙耳机&#xff0c;摆脱有线耳机的束缚&#xff0c;享受更加自由的音乐体验。为了帮助大家选购到适合自己的蓝牙耳机&#xff0c;我整理了一些目前市面上我个人认为性能优异的款式&#xff0c;与大家分享。 一、蓝牙耳…

封装的charts使用 vue2

//组件 <template><div ref"chartRef" class"echart"></div> </template><script> import * as echarts from echartsexport default {data() {return {chart: null}},methods: {init() {if (!this.chart) {this.chart ech…

共享旅游卡见证旅游市场的活力与魅力!这个财富风口你抓住了吗?

共享旅游卡&#xff0c;探索旅游市场新活力&#xff0c;捕捉财富风口 暑期旅游热潮涌动&#xff0c;中国旅游研究院预测&#xff0c;今年暑期将成为五年来最为火爆的旅游季节。在6月至8月期间&#xff0c;国内旅游人数预计占全年出游总人数的近三成&#xff0c;旅游收入也有望…

typeScript5(元组)

数组一般由同种类型的值组成&#xff0c;但有时我们需要在单个变量中存储不同类型的值&#xff0c;这时候我们就可以使用元组。在 JavaScript 中是没有元组的&#xff0c;元组是 TypeScript 中特有的类型&#xff0c;其工作方式类似于数组。 元组最重要的特性是可以限制数组元…

龙哥风向标20240326 GPT拆解

视频号刷到一个便携折叠屏&#xff0c;直击商务用户群体痛点 盈利点&#xff1a;利用视频号平台上商务用户群体的需求&#xff0c;推出便携折叠屏产品&#xff0c;吸引高客单的商务用户群体&#xff0c;同时可以考虑拓展海外市场。 操作步骤&#xff1a; 通过视频号平台了解商…

通科技新品亮相:4K60编解一体,USB透传无忧

在信息化快速发展的今天&#xff0c;音视频技术的需求与应用场景日益丰富&#xff0c;特别是在对视频画质和实时性要求极高的领域中&#xff0c;如军警、公安、金融等&#xff0c;对音视频处理设备的性能要求更为严格。为满足这些高端应用场景的需求&#xff0c;视通科技紧跟时…

【MySql】MySQL表的结构

MySQL表的结构通常包含以下几个部分&#xff1a; 表名&#xff1a; 每个表都有一个唯一的名称&#xff0c;用于标识这个表。 字段&#xff1a; 表中的每一列被称为字段&#xff0c;每个字段都有一个名称和数据类型。如姓名、年龄、编号等。 记录&#xff1a; 表中的每一行被称…

【Node.js从基础到高级运用】十八、Node.js的安全性加固

引言 在Web开发中&#xff0c;安全性是一个不可忽视的话题。Node.js作为一个流行的后端平台&#xff0c;同样需要关注各种潜在的安全威胁&#xff0c;并采取措施加以防御。本文将介绍如何在Node.js应用中防御常见的Web攻击&#xff0c;以及如何使用安全相关的中间件来加固安全性…

24.Python从入门到精通—函数 标准模块 包

24.从入门到精通&#xff1a;__name__属性 dir(函数 标准模块 包 从一个包中导入* __name__属性dir() 函数标准模块包从一个包中导入* __name__属性 在Python中&#xff0c;每个模块&#xff08;module&#xff09;都有一个内置的属性name&#xff0c;用于表示模块的名称。这个…

MySQL-1.数据库的基本操作

1. 数据库的基本操作 show databases; information_schema&#xff1a;信息图式&#xff0c;存储服务器管理数据库的信息 mysql&#xff1a;存放系统信息&#xff0c;用户名密码等 performance_schema&#xff1a;性能图式 sys&#xff1a;系统文件 1.1 创建数据库-studen…