vue3里对Echarts进行封装形成公共组件

在我们使用图表echarts组件时,其实需要对echarts进行封装,形成一个全局公共组件,如果不选择封装成组件,那么按照echarts官方文档来写则每次需要获取实例,然后echarts.init(ref)去初始化图表,这样其实会很麻烦,如果页面里的图表比较多则就会导致页面非常冗余,所以需要对其进行封装。

封装思路:

echarts其实最重要的就是它的配置项option,那么可以把其他的逻辑全部写在组件里,只需要抛出一个option值,再调用组件时只需要传配置项option就可以了。

组件目前支持图表自适应,支持点击事件,如果需要点击事件,只需要传递isClick为true,再绑定onClick事件接收点击的params。

组件源代码

<template><div ref="myEcharts" style="width: 100%;height: 100%"></div>
</template><script setup>
import * as echarts from 'echarts'
const myEcharts = ref(null);
let chartInstance = null;
const props=defineProps({option: {type: Object,required: true,default:{}},isClick:{type:Boolean,default: false}
})
const emit = defineEmits(['onClick'])
onMounted(() => {nextTick(()=>{if (myEcharts.value) {chartInstance = echarts.init(myEcharts.value);updateChart();if(props.isClick){//监听点击事件,点击到空白部分返回nullchartInstance.getZr().on('click',(e)=>{if(e.target){chartInstance.on('click',(params)=>{emit('onClick',params)//触发后卸载点击事件chartInstance.off('click');})}else{emit('onClick',null)}})}window.addEventListener('resize',resizeEcharts)}})
});const updateChart = () => {if (chartInstance && props.option) {chartInstance.setOption(props.option,true);}
};
const resizeEcharts = () =>{if (chartInstance) {chartInstance.resize();}
}watch(() => props.option,updateChart);onUnmounted(() => {if(chartInstance){if(props.isClick){chartInstance.getZr().off('click');}chartInstance.dispose()}window.removeEventListener('resize',resizeEcharts)
});</script><style scoped></style>

组件使用

组件的用法也非常简单,可以直接定义变量存储option,也可以写一个方法,内部对数据进行处理变成自己需要的数据,然后写进option里,最后可以赋给响应式数据渲染出来,也可以直接将option return出来。

<template><div style="width:100%;height:50%"><MyEchart :option='option1'></MyEchart></div><div style="width:100%;height:50%"><MyEchart :option='option2'></MyEchart></div>
</template><script setup>
import MyEchart from './component/MyEchart/index.vue'
//定义变量
const option1 = {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'}]
};const option2 = ref(null)function getOption2(){//对你的数据进行处理let xValue = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];let data = [120, 200, 150, 80, 70, 110, 130]return {xAxis: {type: 'category',data: xValue,},yAxis: {type: 'value'},series: [{data: data,type: 'bar'}]};
}
option2.value = getOption2()
</script>

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

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

相关文章

vue 代理

一、常用的发送一个ajax请求&#xff1a; 1、xhr new XMLHttpRequest(),真正开发中不常用 2、jq&#xff0c;jq主要功能是获取dom&#xff0c;周边才是请求接口 3、axios&#xff08;大名鼎鼎的&#xff09; axios.get("url").then(response>{},error>{} )4、…

Python应用开发——30天学习Streamlit Python包进行APP的构建(11)

st.bokeh_chart 显示互动式虚化图。 Bokeh 是 Python 的一个图表库。此函数的参数与 Bokeh 的 show 函数的参数非常接近。有关 Bokeh 的更多信息,请访问 https://bokeh.pydata.org。 要在 Streamlit 中显示 Bokeh 图表,请在调用 Bokeh 的 show 时调用 st.bokeh_chart。 Fu…

jsonata工具查询JSON和转换

jsonata工具查询JSON和转换 参考网址&#xff1a;http://docs.jsonata.org/1.7.0/date-time https://github.com/IBM/JSONata4Java 简介 JSONata是IBM的OPen Source项目&#xff0c;正是这样做的。它是一种用于查询和转换 JSON 数据结构的表达式语言。JSONata 是一种用于查询…

Android 系统设置中的休眠和屏保

简介 由于客户在Android 系统设置中发现Timeout设置项没有效果&#xff0c;因此我对此研究了一下。Timeout是定时屏幕亮度降低&#xff0c;而Dream则是进入屏幕保护。如果是机顶盒等设备的开发者发现这个设置项没用&#xff0c;别见外&#xff0c;因为这里的亮度调整对TV是没用…

二叉树的方法

目录 一、二叉树的定义 ​编辑 二、二叉树的创建 三、二叉树的遍历 1、前序遍历 2、中序遍历 3、后序遍历 4、层序遍历 四、二叉树遍历方法的使用 五、二叉树的操作 1、节点的个数 2、叶子节点的个数 3、第k层节点的个数 4、二叉树的高度 5、检查值为value的元素…

java生成excel,uniapp微信小程序接收excel并打开

java引包&#xff0c;引的是apache.poi <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency> 写一个测试类&#xff0c;把excel输出到指定路径 public s…

一条SQL查询语句的执行流程

MySQL 中一条 SQL 查询语句的执行流程可以分为以下几个主要步骤&#xff1a; 客户端请求&#xff1a; 客户端通过 MySQL 客户端或应用程序向 MySQL 服务器发送 SQL 查询请求。 连接管理&#xff1a; MySQL 服务器接收到请求后&#xff0c;会首先检查客户端的身份验证信息&…

c++笔记容器详细介绍

C标准库提供了多种容器来存储和管理数据。这些容器属于<vector>, <list>, <deque>, <map>, <set>, <unordered_map>, <unordered_set>等头文件中。这些容器各有优缺点&#xff0c;适用于不同的场景。下面详细介绍几种主要的容器及其…

快20倍还便宜 NVIDIA GPU的“掘墓人”出现了?

芯片初创公司Etched近日宣布推出了一款针对 Transformer架构专用的AISC芯片 “Sohu”&#xff0c;并声称其在AI大语言模型&#xff08;LLM&#xff09;推理性能方面击败了NVIDIA最新的B200 GPU&#xff0c;AI性能达到了H100的20倍。这也意味着Sohu芯片将可以大幅降低现有AI数据…

【面试系列】C++ 高频面试题

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

精密机器中的交叉导轨负荷与容许负荷的差异!

交叉导轨的设计和制造过程中&#xff0c;负荷及容许负荷是至关重要的参数&#xff0c;只有准确计算出交叉导轨的载荷&#xff0c;才能保证交叉导轨的稳定性和使用寿命。 负荷和容许载荷是两个不同的参数&#xff0c;那这两者的有什么差异呢&#xff1f; 交叉导轨的负荷是指其承…

微信群被恶意举报封了加新群的看这里

由于近期太忙&#xff0c;有时候手机被儿子拿玩看动漫了&#xff0c;被误删或是误踢的朋友说声抱歉。 感谢大家的理解和支持。

JVM专题九:JVM分代知识点梳理

今天开始&#xff0c;咱们开始剖析JVM内存划分的原理细节&#xff0c;以及我们创建的那些对象在JVM中到底是如何分配&#xff0c;如何流动的&#xff0c;首先解决第一个问题&#xff1a;JVM内存的一个分代模型:年轻代、老年代、永久通过之前的专题我们知道&#xff0c;那就是我…

HarmonyOS Next开发学习手册——通过startAbilityByType拉起垂类应用

使用场景 开发者可通过特定的业务类型如导航、金融等&#xff0c;调用startAbilityByType接口拉起对应的垂域面板&#xff0c;该面板将展示目标方接入的垂域应用&#xff0c;由用户选择打开指定应用以实现相应的垂类意图。垂域面板为调用方提供统一的安全、可信的目标方应用&a…

REST API 中的 HTTP 请求参数

当我们在谈论现代 Web 开发时&#xff0c;REST API (Representational State Transfer Application Programming Interface) 扮演着至关重要的角色。它允许不同的系统以一种简洁且高效的方式进行通信。HTTP 请求参数是控制此通信流程中数据如何被发送和接收的重要组成部分。 H…

vue2使用wangEditor5搭建模拟文档的编辑器快速集成

如图 1、下载依赖 2、elm引入&#xff08;可省略&#xff09; main.js 或者 按需引入 3、cv <template><div style"background: #f1f3f4"><div style"width: 100%; height: 42px"><!-- 工具栏 --><Toolbarid"tool-conta…

Linux crontab中* * * * * /usr/local/run.sh这句话5个*号分别代表什么?

在 Linux crontab 中&#xff0c;* * * * * /usr/local/run.sh 这句话里的 5 个*号分别代表的含义如下&#xff1a; 第一个&#xff1a;表示分钟&#xff0c;取值范围是 0 到 59。这里的表示每分钟。 第二个&#xff1a;表示小时&#xff0c;取值范围是 0 到 23。表示每小时。…

AI产品经理需要懂的算法和模型

本篇希望以精准推荐模型为案例通过全面的撰写将AI产品经理需要懂的算法和模型进行了系统的入门讲解。 一个产品经理经常疑惑的概念&#xff1a; 算法和模型的关系&#xff0c;产品经理懂得解决问题时将问题抽象为模型&#xff0c;对模型求解用算法&#xff0c;没有谁大谁小&a…

博睿数据受邀出席GOPS全球运维大会北京站,分享《一体化可观测数据模型和AIOps的融合实践》

2024年6月28日&#xff0c;第二十三届 GOPS 全球运维大会暨 XOps 技术创新峰会在北京顺利召开。大会为期2天&#xff0c;侧重 BizDevOps、XOps、DevOps、持续测试、SRE、可观测性、云原生等热门技术领域。并特别设置大模型运维、银行/证券数字化转型、平台工程、DevOps/AIOps 最…

Linux系统中常用的基本命令

1. 文件与目录管理 ls: 列出目录内容。cd: 切换当前工作目录。pwd: 显示当前工作目录的路径。mkdir: 创建一个新目录。rmdir: 删除空目录。cp: 复制文件或目录。mv: 移动或重命名文件或目录。rm: 删除文件或目录。touch: 创建一个空文件或更新文件时间戳。 2. 文本内容查看 …