当前位置: 首页 > news >正文

vue3扩展echart封装为组件库-快速复用

ECharts

ECharts,全称Enterprise Charts,是一款由百度团队开发并开源,后捐赠给Apache基金会的纯JavaScript图表库。它提供了直观、生动、可交互、可个性化定制的数据可视化图表,广泛应用于数据分析、商业智能、网页开发等领域。以下是关于ECharts的详细介绍:

ECharts的特点

  1. 丰富的图表类型:ECharts支持包括折线图、柱状图、散点图、饼图、盒形图、地图、热力图、雷达图、K线图等在内的多种图表类型,满足不同的数据可视化需求。
  2. 多坐标系支持:ECharts支持直角坐标系(Cartesian)、极坐标系(Polar)和地理坐标系(Geo)等多种坐标系,为图表提供了更灵活的布局和展示方式。
  3. 高度可定制:ECharts允许用户通过丰富的配置项来自定义图表的样式、颜色、交互等,实现高度个性化的数据可视化效果。
  4. 良好的兼容性:ECharts可以流畅地运行在PC和移动设备上,并兼容当前绝大部分浏览器,如IE6/7/8/9/10/11、Chrome、Firefox、Safari等。

ECharts的使用方式

  1. 引入ECharts:用户可以通过npm、CDN或GitHub等方式引入ECharts。
  2. 准备一个DOM容器:在HTML中定义一个具有宽高的<div>容器,用于承载图表。
  3. 初始化ECharts实例:使用echarts.init(dom)方法初始化一个ECharts实例,其中dom是前面准备的DOM容器的引用。
  4. 配置图表选项:通过编写一个包含图表配置项的对象(通常称为option),来指定图表的类型、数据、样式等。
  5. 设置图表选项:使用ECharts实例的setOption(option)方法,将配置好的option应用到图表上,实现图表的渲染。

ECharts的示例

以下是一个简单的ECharts柱状图示例:

<!DOCTYPE html>  
<html>  
<head>  <meta charset="utf-8">  <title>ECharts 示例</title>  <!-- 引入 ECharts -->  <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>  
</head>  
<body>  <!-- 准备一个具备大小(宽高)的Dom -->  <div id="main" style="width: 600px;height:400px;"></div>  <script type="text/javascript">  // 基于准备好的dom,初始化echarts实例  var myChart = echarts.init(document.getElementById('main'));  // 指定图表的配置项和数据  var option = {  title: {  text: 'ECharts 示例'  },  tooltip: {},  legend: {  data:['销量']  },  xAxis: {  data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]  },  yAxis: {},  series: [{  name: '销量',  type: 'bar',  data: [5, 20, 36, 10, 10, 20]  }]  };  // 使用刚指定的配置项和数据显示图表。  myChart.setOption(option);  </script>  
</body>  
</html>

vue3扩展echart封装为组件库

在Vue 3中扩展ECharts并将其封装为可复用的组件库:

封装ECharts组件

首先,你需要创建一个ECharts组件,该组件接受必要的props(如选项、宽度、高度等。

<template><div ref="chartRef" :style="{ width, height }"></div>
</template><script setup name="chart">
import { onMounted, ref } from 'vue';
import * as echarts from 'echarts';import { useResizeObserver, useVModel } from '@vueuse/core';const props = defineProps({modelValue: {type: Object,default: {},},height: {type: String,default: '100%',},width: {type: String,default: '100%',},
});const emit = defineEmits(['update:modelValue']);
const data = useVModel(props, 'modelValue', emit);
const chartRef = ref();
let chart = ref();const initChart = () => {if (chartRef.value) {chart = echarts.init(chartRef.value);chart.setOption(data.value);}
};// 定义一个函数来处理尺寸变化
const handleResize = () => {if (chart) {setTimeout(() => {chart.resize();}, 100);}
};const setOption = (option) => {if (chartRef.value) {chart = echarts.init(chartRef.value);chart.setOption(option);}
};onMounted(() => {initChart();// 监听窗口大小变化if (chartRef.value) {useResizeObserver(chartRef.value.parentNode, handleResize);}
});
const getChart = () => {return chart;
};
defineExpose({getChart,setOption,
});
</script>

组件调用

<template><div class="container"><div style="height: 214px" class="flex diygw-col-12"><diy-echart ref="echartRef" v-model="echartOpts" /></div><div style="height: 214px" class="flex diygw-col-12"><diy-echart ref="echart1Ref" v-model="echart1Opts" /></div><div class="clearfix"></div></div>
</template><script setup name="index">import { ElMessageBox, ElMessage } from 'element-plus';import { ref, toRefs, reactive, onMounted, getCurrentInstance, onUnmounted } from 'vue';import { useRouter, useRoute } from 'vue-router';import { storeToRefs } from 'pinia';import { useUserInfo } from '@/stores/userInfo';import DiyEchart from '@/components/echart/index.vue';const stores = useUserInfo();const { userInfos } = storeToRefs(stores);const { proxy } = getCurrentInstance();const router = useRouter();const route = useRoute();const globalOption = ref(route.query);const getParamData = (e, row) => {row = row || {};let dataset = e.currentTarget ? e.currentTarget.dataset : e;if (row) {dataset = Object.assign(dataset, row);}return dataset;};const navigateTo = (e, row) => {let dataset = getParamData(e, row);let { type } = dataset;if ((type == 'page' || type == 'inner' || type == 'href') && dataset.url) {router.push({path: (dataset.url.startsWith('/') ? '' : '/') + dataset.url,query: dataset});} else {ElMessage.error('待实现点击事件');}};const state = reactive({userInfo: userInfos.value,echartOpts: { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: { type: 'value' }, series: [{ data: [150, 230, 224, 218, 135, 147, 260], type: 'line' }] },echart1Opts: { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: { type: 'value' }, series: [{ data: [120, 200, 150, 80, 70, 110, 130], type: 'bar' }] }});const { userInfo, echart1Opts, echartOpts } = toRefs(state);const init = async () => {};// 页面加载时onMounted(async () => {await init();});// 页面卸载时onUnmounted(() => {});
</script><style lang="scss" scoped>.container {font-size: 12px;}
</style>

相关文章:

vue3扩展echart封装为组件库-快速复用

ECharts ECharts&#xff0c;全称Enterprise Charts&#xff0c;是一款由百度团队开发并开源&#xff0c;后捐赠给Apache基金会的纯JavaScript图表库。它提供了直观、生动、可交互、可个性化定制的数据可视化图表&#xff0c;广泛应用于数据分析、商业智能、网页开发等领域。以…...

随机掉落的项目足迹:Vue3 + wangEditor5富文本编辑器——toolbar.getConfig() 查看工具栏的默认配置

问题引入 小提示&#xff1a;问题引入是一个讲故事的废话环节&#xff0c;各位小伙伴可以直接跳到第二大点&#xff1a;问题解决 我的项目不需要在富文本编辑器中引入添加代码块的功能&#xff0c;于是我寻思在工具栏上把操作代码的菜单删一删 于是我来到官网文档工具栏配置 …...

更新 Git 软件

更新 Git 软件本身是指将你当前安装的 Git 版本升级到最新版本。不同的操作系统有不同的更新方法。以下是针对 Windows、macOS 和 Linux 的 Git 更新步骤&#xff1a; Windows 检查当前版本&#xff1a; git --version访问官网下载最新版本&#xff1a; 访问 Git 官方网站 (ht…...

Keil根据map文件确定单片机代码存储占用flash情况

可以从map文件中查看得知&#xff0c;代码占用内存情况大概为35KB,而在在线仿真时&#xff0c;可以看到在flash的0x8008F64地址前均有数据&#xff0c;是代码数据&#xff0c;8F64(HEX)36708(DEC),36708/102335,刚好35。因此&#xff0c;要想操作读写flash&#xff0c;必须在不…...

ByteTrack多目标跟踪流程图

ByteTrack多目标跟踪流程图 点个赞吧&#xff0c;谢谢。...

什么是L2范数

定义&#xff1a; 在数学和计算中&#xff0c;L2 范数是一种用于测量向量长度或大小的方法&#xff0c;也被称为欧几里得范数。对于一个 n 维向量 x ( x 1 , x 2 , … , x n ) \mathbf{x} (x_1, x_2, \dots, x_n) x(x1​,x2​,…,xn​)&#xff0c;其 L2 范数定义为&#x…...

Scrapy爬虫IP代理池:提升爬取效率与稳定性

在互联网时代&#xff0c;数据就是新的黄金。无论是企业还是个人&#xff0c;数据的获取和分析能力都显得尤为重要。而在众多数据获取手段中&#xff0c;使用爬虫技术无疑是一种高效且广泛应用的方法。然而&#xff0c;爬虫在实际操作中常常会遇到IP被封禁的问题。为了解决这个…...

信息技术(IT)行业的发展

近年来&#xff0c;信息技术&#xff08;IT&#xff09;行业的发展呈现出前所未有的活力和潜力。随着全球数字化转型的加速&#xff0c;IT行业正逐步成为推动社会经济发展的重要引擎。无论是互联网、大数据、人工智能&#xff0c;还是云计算、物联网&#xff0c;这些新兴技术都…...

C++primer第十一章使用类(矢量随机游走实例)

操作符重载 操作符重载(operator overoading)是一种形式的 C多态。 第8章介绍了C是如何使用户能够定义多个名称相同但特征标(参数列表)不同的函数的。这被称为函数重载(function overloading)或函数多态(functional polymorphism)&#xff0c;旨在让您能够用同名的函数来完成…...

服务器为什么会受到网络攻击?

随着科技的 快速发展&#xff0c;企业也开展了越来越多的线上业务&#xff0c;但同时也遭受到各种各样的网络攻击&#xff0c;那服务器为什么会受到网络攻击呢&#xff1f;下面就让小编带领大家一起来了解一下吧&#xff01; 首先企业中服务器被攻击的原因有很多&#xff0c;主…...

IDA Pro基本使用

IDA Pro基本使用 1.DllMain的地址是什么? 打开默认在的位置1000D02E就是DllMain地址 按空格键可以看到图形化界面选择options、general勾选对应的选项在图像化也能看到 2.使用Imports 窗口并浏览到 gethostbyname&#xff0c;导入函数定位到什么地址? 这里可以打开Impo…...

Day.js时间插件的安装引用与常用方法大全

&#x1f680; 个人简介&#xff1a;某大型国企资深软件研发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…...

aws 容器镜像仓库操作

aws 容器镜像仓库产品叫ECR&#xff0c;官方文档参考&#xff1a;Amazon Elastic Container Registry。 1&#xff09;账号认证 # 配置aws命令 $ aws configure set aws_access_key_id ${ak} $ aws configure set aws_secret_access_key ${sk} 2&#xff09;镜像仓库登陆 #…...

学习记录:js算法(四十一): 基于时间的键值存储

文章目录 基于时间的键值存储网上思路 总结 基于时间的键值存储 设计一个基于时间的键值数据结构&#xff0c;该结构可以在不同时间戳存储对应同一个键的多个值&#xff0c;并针对特定时间戳检索键对应的值。 实现 TimeMap 类&#xff1a; TimeMap() 初始化数据结构对象void se…...

C语言 | Leetcode C语言题解之第424题替换后的最长重复字符

题目&#xff1a; 题解&#xff1a; int characterReplacement(char* s, int k) {int num[26];memset(num, 0, sizeof(num));int n strlen(s);int maxn 0;int left 0, right 0;while (right < n) {num[s[right] - A];maxn fmax(maxn, num[s[right] - A]);if (right - …...

大数据时代的PDF解析:技术与挑战

在大数据时代&#xff0c;海量信息以不同格式存储&#xff0c;其中 PDF 文件凭借其广泛应用成为了各种业务场景下的主要文档格式。无论是政府文件、企业报告&#xff0c;还是学术论文和技术文档&#xff0c;PDF 都是信息交流的重要媒介。然而&#xff0c;随着信息的爆炸式增长&…...

《nmap 命令全解析:网络探测与安全扫描的利器》

文章目录 一、引言二、nmap 命令概述三、nmap 基本用法&#xff08;一&#xff09;安装 nmap&#xff08;二&#xff09;简单扫描示例 四、nmap 常见参数&#xff08;一&#xff09;-sS&#xff08;TCP SYN 扫描&#xff09;&#xff08;二&#xff09;-sT&#xff08;TCP 连接…...

2024年华为OD机试真题-斗地主之顺子-Python-OD统一考试(E卷)

最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精选c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,持续跟新。 题目描述 在斗地主只扑克牌游戏中,…...

亲测有效,长期有效的RTSP流地址公网RTSP地址,各种类型的视频源

我们经常需要做一些实时视频流的测试&#xff0c;但是手边又没有办法及时弄到一个摄像机&#xff0c;我们经常会去搜索一下“公网RTSP地址”&#xff0c;但是大部分现在都失效了&#xff0c;有什么办法能够让我们快速构建一个RTSP流&#xff0c;点几下就能直接用&#xff1f; …...

Excel常用函数大全

Excel常用函数介绍与示例应用 在Excel中&#xff0c;函数是进行数据处理和分析的强大工具。对于新手来说&#xff0c;掌握一些基本的函数使用方法能够大大提升工作效率。以下是一份通俗易懂、适合新手的Excel函数使用方法总结&#xff1a; 1. 求和函数&#xff08;SUM&#x…...

低成本数据标注:OpenClaw+Phi-3-vision-128k-instruct半自动化标记工具

低成本数据标注&#xff1a;OpenClawPhi-3-vision-128k-instruct半自动化标记工具 1. 为什么我们需要半自动化数据标注 在计算机视觉项目中&#xff0c;数据标注往往是耗时最长、成本最高的环节。我曾经参与过一个商品识别项目&#xff0c;团队3个人花了整整两周时间才完成50…...

VL53L1X ToF测距传感器嵌入式驱动开发全指南

1. VL53L1X 距离传感器驱动库深度解析与嵌入式工程实践VL53L1X 是意法半导体&#xff08;STMicroelectronics&#xff09;基于飞行时间&#xff08;Time-of-Flight, ToF&#xff09;原理推出的高精度、单点激光测距传感器。其核心优势在于&#xff1a;在 40mm–4000mm 典型量程…...

DBSCAN vs K-means:5个真实数据集对比,教你选对聚类算法

DBSCAN与K-means实战对比&#xff1a;5个真实数据集下的算法选择指南 第一次接触聚类分析时&#xff0c;我被一个简单问题困扰&#xff1a;为什么同样的数据用不同算法会得到截然不同的分组结果&#xff1f;记得当时用K-means处理地理坐标数据&#xff0c;结果把绵延的海岸线硬…...

单线程 Redis 的高性能之道

引言Redis 以单线程模型处理网络请求与命令操作&#xff0c;却能在高并发场景下保持惊人的吞吐能力。这背后离不开三大基石&#xff1a;全内存存储、高效数据结构&#xff08;哈希表、跳表等&#xff09;以及 epoll 多路复用机制&#xff0c;让单线程能够高效处理海量连接。 随…...

C++ 动态内存管理深度解析:new/delete 完全指南

引言在 C 语言中&#xff0c;我们使用 malloc()、calloc()、realloc() 和 free() 来管理动态内存。而 C 引入了全新的动态内存管理方式——new 和 delete。这不仅带来了语法上的简化&#xff0c;更重要的是引入了类型安全和初始化的概念。在学习过程中&#xff0c;我对 new 的理…...

如何通过GDScript游戏开发入门成为独立游戏开发者

如何通过GDScript游戏开发入门成为独立游戏开发者 【免费下载链接】learn-gdscript Learn Godots GDScript programming language from zero, right in your browser, for free. 项目地址: https://gitcode.com/gh_mirrors/le/learn-gdscript 对于许多游戏爱好者来说&am…...

LibreCAD:开源2D CAD解决方案的价值与实践指南

LibreCAD&#xff1a;开源2D CAD解决方案的价值与实践指南 【免费下载链接】LibreCAD LibreCAD is a cross-platform 2D CAD program written in C17. It can read DXF/DWG files and can write DXF/PDF/SVG files. It supports point/line/circle/ellipse/parabola/spline pri…...

如何3步轻松备份微博内容:Speechless免费PDF导出完整指南

如何3步轻松备份微博内容&#xff1a;Speechless免费PDF导出完整指南 【免费下载链接】Speechless 把新浪微博的内容&#xff0c;导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 在信息快速更迭的数字时代&…...

3大优势让学术翻译更安全:Zotero PDF翻译插件离线方案全解析

3大优势让学术翻译更安全&#xff1a;Zotero PDF翻译插件离线方案全解析 【免费下载链接】zotero-pdf-translate Translate PDF, EPub, webpage, metadata, annotations, notes to the target language. Support 20 translate services. 项目地址: https://gitcode.com/gh_mi…...

Vue生命周期的灵魂拷问:created vs mounted,数据请求到底该在哪?

Vue生命周期的灵魂拷问&#xff1a;created vs mounted&#xff0c;数据请求到底该在哪&#xff1f; 在Vue.js的世界里&#xff0c;生命周期钩子是赋予开发者“上帝视角”的魔法&#xff0c;让我们能在组件从诞生到消亡的整个过程中&#xff0c;在精确的时机注入自定义逻辑。其…...