Vue中使用Echarts封装为公用组件(简单复制粘贴)

news2024/11/16 12:43:40

Vue中封装Echarts组件

  • 前提
  • 直奔主题

1
本文以Vue3代码演示 Vue2同理

前提

中文官网: https://echarts.apache.org/zh/index.html

npm安装Echarts

npm install echarts
or
pnpm install echarts
or
yarn add echarts

直奔主题

  1. 创建Echarts.vue文件,代码如下👇

    <template>
      <div :id="id" :style="{ height, width }" />
    </template>
    <script setup>
    import * as echarts from "echarts";
    
    let myChart = ref(null);
    
    const props = defineProps({
      // 区分chart
      id: {
        type: String,
        default: 'e-chart',
        required: true
      },
      // echarts 画布宽高
      width: {
        type: String,
        default: '100%',
      },
      height: {
        type: String,
        default: '300px',
      },
      // echarts loading
      loading: {
        type: Boolean,
        default: true,
      },
      // echarts需要得 options以及其他配置
      fullOptions: {
        type: Object,
        default: () => ({}),
        required: true
      },
    
    })
    
    
    //重绘图表函数
    const resizeHandler = () => {
      myChart.value.resize();
    }
    //设置防抖,保证无论拖动窗口大小,只执行一次获取浏览器宽高的方法
    const debounce = (fun, delay) => {
      let timer;
      return function () {
        if (timer) {
          clearTimeout(timer);
        }
        timer = setTimeout(() => {
          fun();
        }, delay);
      }
    };
    const cancalDebounce = debounce(resizeHandler, 50);
    
    
    //监听图表数据时候变化,重新渲染图表
    watch(() => [props.fullOptions.options, props.loading], () => {
      if (!props.loading) {
        myChart.value.hideLoading();
        myChart.value.setOption(props.fullOptions.options, true);
        nextTick(() => {
          cancalDebounce()
        })
      }
    }, { deep: true })
    
    
    //页面成功渲染,开始绘制图表
    onMounted(() => {
      //配置为 svg 形式,预防页面缩放而出现模糊问题;图表过于复杂时建议使用 Canvas
      myChart.value = echarts.init(document.getElementById(props.id), { renderer: 'svg' })
      //加载图标
      myChart.value.showLoading({
        text: '',
        color: '#409eff',
        textColor: '#000',
        maskColor: 'rgba(255, 255, 255, .95)',
        zlevel: 0,
        lineWidth: 2,
      });
      if (!props.loading) {
        myChart.value.hideLoading();
        myChart.value.setOption(props.fullOptions.options, true);
      }
      //自适应不同屏幕时改变图表尺寸
      window.addEventListener('resize', cancalDebounce);
    })
    //页面销毁前,销毁事件和实例
    onBeforeUnmount(() => {
      window.removeEventListener('resize', cancalDebounce)
      myChart.value.dispose()
    })
    
    </script>
    
  2. 添加echarts得options配置文件optionsConfig.js,代码如下👇

    export const chartOptions = {
    	// 推荐以setXXXOption方式命名
    	setDemoOption(data) {
            let color = ['#0E7CE2', '#FF8352', '#E271DE', '#F8456B', '#00FFFF', '#4AEAB0']
    	    let echartData = [
    	      {
    	        name: '安全帽佩戴报警',
    	        value: '13'
    	      },
    	      {
    	        name: '非法闯入报警',
    	        value: '33'
    	      },
    	      {
    	        name: 'C类',
    	        value: '13'
    	      },
    	      {
    	        name: 'D类',
    	        value: '13'
    	      }
    	    ]
    	
    	    let formatNumber = function (num) {
    	      let reg = /(?=(\B)(\d{3})+$)/g
    	      return num.toString().replace(reg, ',')
    	    }
    	
    	    const option = {
    	      color: color,
    	      // tooltip: {
    	      //     trigger: 'item'
    	      // },
    	      legend: {
    	        orient: 'vertical',
    	        icon: 'rect',
    	        x: '5%',
    	        y: 'center',
    	        itemWidth: 12,
    	        itemHeight: 12,
    	        align: 'left',
    	        textStyle: {
    	          rich: {
    	            name: {
    	              fontSize: 12,
    	              color: 'rgba(255, 255, 255, 0.7)'
    	            },
    	            value: {
    	              fontSize: 16,
    	              padding: [0, 5, 0, 5],
    	              color: 'rgba(255, 255, 255, 0.7)'
    	            },
    	            unit: {
    	              fontSize: 12
    	            }
    	          }
    	        },
    	        formatter: function (name) {
    	          let res = echartData.filter((v) => v.name === name)
    	          res = res[0] || {}
    	          let unit = res.unit || ''
    	          // return '{name|' + name + '}  {value|' + res.value + '}{unit|' + unit + '}'
    	          return '{name|' + name + '} '
    	        },
    	        data: echartData
    	      },
    	      series: [
    	        {
    	          type: 'pie',
    	          radius: ['20%', '40%'],
    	          center: ['65%', '60%'],
    	          color,
    	          data: echartData.map((item, index) => {
    	            return {
    	              label: {
    	                color: color[index]
    	              },
    	              ...item
    	            }
    	          }),
    	          hoverAnimation: false,
    	          itemStyle: {
    	            borderWidth: 2
    	          },
    	          labelLine: {
    	            show: true,
    	            length: 30,
    	            length2: 60,
    	            lineStyle: {
    	              color: '#0080ff'
    	            }
    	          },
    	          label: {
    	            show: true,
    	            formatter: (params) => {
    	              return '{icon|●}{name|' + params.name + '}{value|' + formatNumber(params.value) + '}'
    	            },
    	            padding: [0, -80, 25, -100],
    	            rich: {
    	              icon: {
    	                fontSize: 16
    	              },
    	              name: {
    	                fontSize: 12,
    	                padding: [0, 10, 0, 4]
    	              },
    	              value: {
    	                fontSize: 12,
    	                fontWeight: 'bold'
    	              }
    	            }
    	          }
    	        }
    	      ]
    	    }
    		return option
    	},
    
    }
    
  3. 在Vue视图中引入Echarts组件使用,代码示例如下👇

    <ECharts id="demoEcharts" width="500px" height="500px" :full-options="echartsOptions" :loading="loading"></ECharts>
    
    //引入echarts的options配置文件optionsConfig.js
    import { chartOptions } from '@/components/ECharts/optionsConfig.js'
    
    //定义loading、echarts配置项
    const loading = ref(true)
    const echartsOptions = reactive({
      options:{}
    })
    
    // 模拟异步
    setTimeout(() => {
      loading.value = false
      echartsOptions.options = chartOptions.setDemoOption();
    },500)
    






到这里就结束了,后续还会更新 前端 系列相关,还请持续关注!
感谢阅读,若有错误可以在下方评论区留言哦!!!

111


相关文章👇
图表集
在Vue2项目中使用echarts

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

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

相关文章

【Java每日一题】— —第二十六题:编程定义一个经理类Manager。(2023.10.10)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

【Java】Java中的零拷贝

物理内存 计算机物理内存条的容量&#xff0c;比如我们买电脑会关注内存大小有多少G&#xff0c;这个容量就是计算机的物理内存。 虚拟内存 操作系统为每个进程分配了独立的虚拟地址空间&#xff0c;也就是虚拟内存&#xff0c;虚拟地址空间又分为用户空间和内核空间&#x…

[网鼎杯 2018]Comment git泄露 / 恢复 二次注入 bash_history文件查看

首先我们看到账号密码有提示了 我们bp爆破一下 我首先对数字爆破 因为全字符的话太多了 爆出来了哦 所以账号密码也出来了 zhangwei zhangwei666 没有什么用啊 扫一下吧 有git git泄露 那泄露看看 真有 <?php include "mysql.php"; session_start(); if(…

JUC第二十一讲:JUC线程池:ScheduledThreadPoolExecutor详解

JUC线程池&#xff1a;ScheduledThreadPoolExecutor详解 本文是JUC第二十一讲&#xff0c;JUC线程池: ScheduledThreadPoolExecutor详解。在很多业务场景中&#xff0c;我们可能需要周期性的运行某项任务来获取结果&#xff0c;比如周期数据统计&#xff0c;定时发送数据等。在…

07_项目开发_用户信息列表

1 用户信息列表内容展示 用户信息列表&#xff0c;主要完成用户信息的添加、删除、修改和查找功能。 用户列表页面效果&#xff1a; 单击“添加用户”按钮&#xff0c;进入添加用户页面。 填写正确的信息后&#xff0c;单击“添加用户”按钮&#xff0c;会直接跳转到用户列表…

算法题:买卖股票的最佳时机 II (贪心算法解决股票问题)

这道题是贪心算法的中级难度练习题&#xff0c;由于题目设定&#xff0c;整个价格都是透明的&#xff0c;这里并不涉及需要预测股票涨势的问题。解决思路不难&#xff0c;就是一旦股票价格开始下降了就买入&#xff0c;一旦上升了&#xff0c;就赶紧卖出。&#xff08;完整题目…

算法题:盛最多水的容器(贪心算法双指针问题)

这个题目乍一看就是双指针&#xff0c;没想到官方解答也是双指针&#xff0c;我在官方的基础上优化了一下下&#xff0c;左右两边各一个指针&#xff0c;每次移动短的那一头的时候&#xff0c;不是移动一格&#xff0c;而是找到比短的那一头要长一点的&#xff0c;再进行比较。…

机器学习与模式识别作业----决策树属性划分计算

文章目录 1.决策树划分原理1.1.特征选择1--信息增益1.2.特征选择2--信息增益比1.3.特征选择3--基尼系数 2.决策树属性划分计算题2.1.信息增益计算2.2.1.属性1的信息增益计算2.2.2.属性2的信息增益计算2.2.3.属性信息增益比较 2.2.信息增益比计算2.3.基尼系数计算 1.决策树划分原…

小程序中使用echarts配置以及折线图案例(简单易懂)

第一步&#xff1a;引入echarts文件--此文件需要下载&#xff1a; 下载地址&#xff1a;点击此处进行下载echarts文件 点击Download ZIP下载压缩包&#xff0c;注意&#xff1a;此文件&#xff0c;我是从完整的文件中剥离出来的有用的&#xff0c;不会影响项目。 第二步&#…

# 解析Pikachu靶场:一个安全研究的练习场

引言 Pikachu靶场是一个非常流行的安全研究和渗透测试练习平台。这个环境包括多个安全漏洞&#xff0c;从基础的到高级的&#xff0c;供安全研究人员和渗透测试者进行实验和学习。在这篇博客中&#xff0c;我们将探讨Pikachu靶场的基本概念&#xff0c;功能&#xff0c;以及如…

vue3+vite+ts 组件中自动导入 ref 和 reactive

前言 在每个vue组件中&#xff0c;都去手动引入 ref 和 reactive 是非常繁琐的一件事&#xff0c;我们可以通过插件来完成自动导入 安装插件 npm i unplugin-auto-import -D 配置插件 在 vite.config.ts 中增加如下代码 import { defineConfig } from vite import vue fr…

初识操作系统以及Linux环境搭建

&#x1f4d9;作者简介&#xff1a; 清水加冰&#xff0c;目前大二在读&#xff0c;正在学习C/C、Python、操作系统、数据库等。 &#x1f4d8;相关专栏&#xff1a;C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

大数据Splunk Enterprise 平台+cpolar 实现远程访问

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 Splunk Enterprise是一个强大的机器数据管理平台&#xff0c;可帮助客户分析和搜索数据&#xff0c;以及可视化数据…

企架布道:中电金信应邀出席2023佛山敏捷之旅暨DevOps Meetup

近日&#xff0c;2023佛山敏捷之旅暨DevOps Meetup活动顺利举行&#xff0c;本次活动以助力大湾区金融和互联网企业敏捷DevOps实施和效能提升为主题&#xff0c;共设立 2个会场&#xff0c;16个话题分享&#xff0c;200余位金融、互联网企业相关从业人员齐聚一堂&#xff0c;共…

第二证券:市场情绪或逐步修复 十月行情值得期待

第二证券指出&#xff0c;周一A股商场探底回升、小幅轰动收拾&#xff0c;沪指全天底子出现先抑后扬的运转特征。其时上证综指与创业板指数的平均市盈率分别为12.46倍、33.94倍&#xff0c;处于近三年中位数以下水平&#xff0c;商场估值仍然处于较低区域&#xff0c;合适中长期…

excel单元格合并策略

excel单元格合并策略 证明112&#xff1f; 要证明112这个问题&#xff0c;首先我们要找到问题的关键。所谓问题的关键呢&#xff0c;就是关键的问题&#xff0c;那么如何找到问题的关键就是这个问题的关键。 比如说&#xff0c;你有一个苹果&#xff0c;我也有一个苹果&#x…

管理Linux的联网

1. RHEL9版本特点 在RHEL7版本中&#xff0c;同时支持network.service和NetworkManager.service&#xff08;简称NM&#xff09;。 在RHEL8上默认只能通过NM进行网络配置&#xff0c;包括动态ip和静态ip,若不开启NM&#xff0c;否则无法使用网络 RHEL8依然支持network.service&…

【工具软件】Nativefier——把网页打包成exe软件

官方文档 安装 npm install nativefier -g使用 在 nativefier 后加上需要转换的网站地址, 比如: nativefier "https://blog.csdn.net/IAIPython?typeblog"第一次打包需要下载 Eletron 框架, 很慢… 运行完毕, 会生成一个应用, 路径一般为C:\Users\用户名… 如图…

前后端分离项目-基于springboot+vue的图书馆管理系统的设计与实现(内含代码+文档+报告)

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…

Servlet开发步骤

标准Java Web工程结构 pom.xml中提供servlet依赖 1.创建java类&#xff0c;继承HttpServlet 2.重写service方法&#xff0c;处理请求&#xff0c;生成响应 3.配置web.xml&#xff0c;绑定访问地址 Servlet接收请求参数 request.getParameter() 接收单个参数 request.ge…