封装通用echarts(多次复用同一个图表)

vue项目在同一页面中引入多个echarts图表 ,并实现封装,自适应和动态数据改变 vue-Echarts公司最近做项目需要用到图表,以前是使用echarts,现在也是用这个,没什么好纠结的! 但是最近发现以前每次做图表之类的都没有封装,每次做图表都要从新去配置之类的,写了好多重复代码,感觉很累啊,所以自己把图表封装成子组件使用,代码工作量减轻了很多,而且子组件使用了数据进行监听和图表自适应屏幕大小,这样以后会方便很多了!当然公司的项目肯定不能发出来了,我会做个简单的demo出来... 阅读详情

子组件(会有there is a chart instance already initialized on the dom.的警告⚠)

<!--https://blog.youkuaiyun.com/Maxueyingying/article/details/127867855-->
<template>
  <div style="width: 100%;height: 100%;" ref="Echart"></div>
</template>

<script>
import * as echarts from "echarts";
export default {
  name: "lineChart",
  props: {
    //接受父组件传递来的数据
    labelList: Array,
    xAxisList: Array,
  },
  data() {
    return {};
  },
  watch: {
    labelList: function (newQuestion, oldQuestion) {
      this.initChart();
    },
  },
  mounted() {
    this.init();
    this.initChart();
  },
  methods: {
    init() {
      const self = this; //因为箭头函数会改变this指向,指向windows。所以先把this保存
      setTimeout(() => {
        window.addEventListener("resize", function () {
          self.chart = echarts.init(self.$refs.Echart);
          self.chart.resize();
        });
      }, 10);
    },
    initChart() {
      if (myChartOne != null && myChartOne != "" && myChartOne != undefined) {
        myChartOne.dispose();
      }
      // 创建 echarts 实例。
      var myChartOne = echarts.init(this.$refs.Echart);
      //如果为空 则正常进行渲染 反之 不再进行初始化
      if (myChartOne == null) {
        myChartOne = echarts.init(this.$refs.Echart)
      }
      myChartOne.setOption({
        //直角坐标系内绘图网格
        grid: {
          top: "5%",
          left: "3%", //grid 组件离容器左侧的距离
          right: "4%",
          bottom: "3%",
          containLabel: true, //grid 区域是否包含坐标轴的刻度标签
        },
        // 如果有多个同类组件,那么就是个数组。例如这里有三个 X 轴。
        xAxis: {
          type: "category",
          data: this.xAxisList,
          name: "data",
          axisLine: {
            show: false, //隐藏x轴线
            lineStyle: {
              color: "#ffffff",
            },
          },
          axisTick: {
            show: false, //隐藏x轴刻度
          },
        },

        yAxis: {
          type: "value",
          axisLine: {
            show: false,
            lineStyle: {
              color: "#ffffff",
            },
          },
          axisTick: {
            show: false, //隐藏y轴刻度
          },
          splitLine: {
            lineStyle: {
              // 设置背景横线
              color: "#BBBBBB",
            },
          },
        },
        series: [
          {
            data: this.labelList,
            type: "line",
            // smooth: true, //默认是false,判断折线连线是平滑的还是折线
            itemStyle: {
              // normal: {
                color: "#FDE708", //改变折线点的颜色
                lineStyle: {
                  color: "#FDE708", //改变折线颜色
                },
              // },
            },
          },
        ],
      });
    },
  },
};
</script>

<style scoped>

</style>

更改优化后版本 

<!--https://blog.youkuaiyun.com/Maxueyingying/article/details/127867855-->
<template>
  <div style="width: 100%;height: 100%;" ref="Echart"></div>
</template>

<script>
import * as echarts from "echarts";
export default {
  name: "lineChart",
  props: {
    //接受父组件传递来的数据
    labelList: Array,
    xAxisList: Array,
  },
  data() {
    return {
      myChart: null
    };
  },
  watch: {
  },
  mounted: function() {
    const vm = this
    vm.$nextTick(() => {
      vm.initChart()
      window.addEventListener('resize', this.wsFunc)
    })
  },
  methods: {
    wsFunc() {
      this.myChart.resize()
    },
    initChart() {
      // 创建 echarts 实例。
      this.myChart = echarts.init(this.$refs.Echart);
      //如果为空 则正常进行渲染 反之 不再进行初始化
      if (this.myChart == null) {
        this.myChart = echarts.init(this.$refs.Echart)
      }
      this.myChart.setOption({
        //直角坐标系内绘图网格
        grid: {
          top: "5%",
          left: "3%", //grid 组件离容器左侧的距离
          right: "4%",
          bottom: "3%",
          containLabel: true, //grid 区域是否包含坐标轴的刻度标签
        },
        // 如果有多个同类组件,那么就是个数组。例如这里有三个 X 轴。
        xAxis: {
          type: "category",
          data: this.xAxisList,
          name: "data",
          axisLine: {
            show: false, //隐藏x轴线
            lineStyle: {
              color: "#ffffff",
            },
          },
          axisTick: {
            show: false, //隐藏x轴刻度
          },
        },

        yAxis: {
          type: "value",
          axisLine: {
            show: false,
            lineStyle: {
              color: "#ffffff",
            },
          },
          axisTick: {
            show: false, //隐藏y轴刻度
          },
          splitLine: {
            lineStyle: {
              // 设置背景横线
              color: "#BBBBBB",
            },
          },
        },
        series: [
          {
            data: this.labelList,
            type: "line",
            // smooth: true, //默认是false,判断折线连线是平滑的还是折线
            itemStyle: {
              // normal: {
              color: "#FDE708", //改变折线点的颜色
              lineStyle: {
                color: "#FDE708", //改变折线颜色
              },
              // },
            },
          },
        ],
      });
    },
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.wsFunc)
    if (!this.myChart) {
      return
    }
    this.myChart.dispose()
    this.myChart = null
  },
};
</script>

<style scoped>

</style>

父组件

<div style="display: flex;">
    <!-- 冷藏区 -->
    <div class="bkChart">
      <fzEcharts :labelList="coldAreaList" :xAxisList="xAxiscoldAreaList" />
    </div>
    <!-- 回温区 -->
    <div class="bkChart">
      <fzEcharts :labelList="hotAreaList" :xAxisList="xAxisHotAreaList" />
    </div>
  </div>
import fzEcharts from "./echarts/fzEcharts";
export default {
  components:{
    fzEcharts
  },
  data() {
    return {
        xAxiscoldAreaList: ["2", "4", "6", "8", "10", "12"],
      xAxisHotAreaList: ["2", "4", "6", "8", "10", "12"],
      coldAreaList: ["3", "5", "7", "10", "4", "6"],
      hotAreaList: ["6", "3", "5", "8", "10", "6"]
    }
  },
}

 vue封装的echarts组件被同一个页面多次引用无法正常显示问题(已解决)

封装一个通用的 ECharts 图表组件(一) 本文分享了如何封装一个通用的 Vue QuickChart 组件以简化 ECharts 图表的集成。封装旨在提高代码复用性和可维护性,同时通过 props 增强灵活性。 阅读详情

相关推荐

二次封装快捷实现Echarts可视化图表

ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11,chrome,firefox,Safari等),底层依赖轻量级的Canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。 现在将实际项目中用到的柱状图的js统一封

嘎嘎滴小菜鸟的博客 7472

echarts动态循环出多个相同图表但不同数据动态渲染图表

效果图 代码 html部分 <!-- 图表 --> <div style="height: 60vh; margin-top: 70px" v-for="(item, index) in aaa" :key="index" > <div style="height: 100%; width: 100%" class="roseChart"></div> </div>

seeeeeeeeeee的博客 4541

解决vue一个页面中复用同一个echarts组件的问题

主要介绍了解决vue一个页面中复用同一个echarts组件的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

(echarts)vue中循环生成多个相同的echarts图表,但数据动态、第一次渲染失败问题

【代码】(echarts)vue中循环生成多个相同的echarts图表,但数据动态。

nyf_unknow的博客 1313

DBeaver连接IoTDB避坑指南:手动配置JDBC驱动的完整流程(附问题排查)

本文提供了在DBeaver中手动配置Apache IoTDB JDBC驱动的完整流程与避坑指南。详细解析了从驱动创建、库文件添加(关键是指向整个lib目录)到连接测试的每一步,并重点针对常见的ClassNotFoundException、连接拒绝等错误提供了深度排查方案,帮助用户高效建立图形化管理连接。

weixin_28327051的博客 396

倍福ADS通讯协议深度解析——从握手到数据包的完整旅程

本文以工程师视角,通过Wireshark抓包实战,深度解析了倍福ADS通讯协议的完整工作流程。从TCP三次握手建立连接,到拆解AMS/TCP信封、AMS Header地址与命令解析,再到ADS Data读写请求的载荷构成,完整呈现了一次数据通讯的“旅程”。文章重点剖析了协议包格式,并结合实际案例,提供了基于协议分析的故障排查思路,帮助开发者深入理解并精准调试工业自动化系统通讯。

weixin_29231725的博客 152

关于vue一个页面中复用同一个echarts组件的问题

关于vue一个页面中复用同一个echarts组件的问题

m0_61890246的博客 3969

数仓 - 促销敏感度、评论敏感度

1. 促销敏感度 步骤1. 首先按照最后一次下单时间及有无复购情况将用户分为四大群体: 近一年有购物行为且复购的用户 -- L1 (今年复购用户) 近一年有购物行为但无复购的用户 --L2 (今年一单购用户) 最后一次下单时间在1年之前且有复购的用户 --L3 (今年无购且只有一单用户) 最后一次下单时间在1年之前但无复购的用户 -- L4 (今年无购多单用户) 步骤2. 每一类用户群再根据优惠订单占比、每单优惠金额占比的平均值、优惠金额这三个指标进行k-means聚类,分为: 非常敏感 -

weixin_41332009的博客 1900

Echarts单页面渲染多个echarts组件,清除echarts实例

Echarts在同一个dom中, 必须先销毁一个组件后, 才能渲染另外一个组件。代码如下 , 切记 echarts容器要给宽高。

m0_73854403的博客 1207

ESP-01S获取网络时间踩坑全记录:AT指令调试、JSON解析乱码、时区处理,一个都不能少

本文详细记录了使用ESP-01S WIFI模块获取网络时间的完整过程,包括AT指令调试、JSON解析乱码处理以及时区转换等关键步骤。通过实战案例和代码示例,帮助开发者避开常见陷阱,实现稳定的网络时间同步功能。

weixin_30460489的博客 295

从CTF到实战:Frida Hook无导出SO函数的3种特殊姿势

本文深入探讨了在移动安全逆向工程中,如何利用Frida Hook无导出SO函数的三种高级技巧:字符串引用定位法、调用栈回溯法和内存特征码扫描。针对安卓So层加固和混淆场景,文章结合CTF赛题与实战案例,详细解析了每种方法的原理、实现步骤与适用场景,为安全研究人员提供了从理论到实践的完整解决方案。

jenkins8butler的博客 516

关于Echarts图表复用解决id唯一性

目前市面上许多项目都会接触到可视化大屏的开发,用得最多的三方组件库Echarts,在进行封装后复用许多同学会发现页面渲染异常问题,只会渲染第一次复用的内容.究其原因在于我们通过Id获取了页面节点进行渲染造成了id的重复.网上也有许多的解决方案.在此,给大家分享一个自己测试后的可行的实施方案.我们可以通过uuid生成不同的id向子组件传值指定唯一性,也可以通过随机数的方式.具体的操作我们接着往下看.然后在需要使用的组件中父组件()引入对应的组件.expControl.vue。新建createID.js文件。

qq_50502116的博客 1354

机器人环境仿真软件:Webots_(9).路径规划与导航算法仿真实现

通过仿真,我们可以验证路径规划算法的有效性和鲁棒性,同时优化机器人在不同环境中的导航性能。动态窗口法是一种局部路径规划算法,通过在机器人当前速度空间中选择一个最优的速度窗口,使机器人在动态环境中安全地移动。算法的代价函数通常包括两个部分:从起始点到当前节点的实际代价(g-cost)和从当前节点到目标节点的估计代价(h-cost)。在World Editor中,选择“Insert”菜单,添加“Robot”对象,如“E-puck”或“Thymio”。Dijkstra算法的实现与A*算法类似,但不使用启发函数。

kkchenjj的博客 2006

vue封装的echarts组件多次被同一个页面调用出现的问题

当我们在封装了echarts组件之后,需要在同一个页面中引入多次时,会出现数据覆盖等一系列问题 当时我是修改了id也无济于事,达不到我需要的效果 解决方案 其实很简单,修改一点就好了,将我们封装的组件中的id选择器删掉,换成ref,下面是组件修改部分 <template> <div> <div class="echarts my-echarts" ref=...

LisaWwwang的博客 3904

SAP MM模块后续借记、后续贷记、贷方凭证简介

在SAP系统中,后续借记、后续贷记和贷方凭证是处理供应商发票、采购和付款过程中常见的财务交易。

我小时候很黑的博客 3272

RT-DETR模型应用过程中的报错处理及疑问解答,涉及环境搭建、模型训练、模块改进、论文写作

本文记录了RT-DETR模型的这一系列过程中可能发生的问题,以及大家非常关心的问题,这里统一做了一个记录和解答。

Limiiiing的博客 1768

在Vue中封装Echarts并使用

在Vue中封装Echarts并使用为什么要封装效果图以及项目目录1、效果图2、项目目录具体封装过程1、Echarts的安装2、引入3、封装案例4、使用组件的页面5、使用mixins解决resize问题6、element-resize-detector写在最后 为什么要封装 如果不封装,每用一次图表,都要重新配置一边option,封装起来方便复用,也方便统一管理。 解决元素以及窗口的resize等问题。 自己动手封装,只需要看一份文档,并且可以使用更多的原生功能。 看完这篇文章你或许觉得自己封装并不难。

weixin_43242112的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

vue项目中封装echarts比较优雅的方式_echarts封装

在src新建一个chars文件夹存放图表数据,在下方可以放一些柱状图折线图的配置js文件。1.首先创建一个文件夹,进入终端,一定要安装node ,查看我们的node版本。**注意:**配置可以导出一个函数,以后可以传递参数和自定义的配置项。图表配置=>echarts官网找到。点击开始就可以进入文档了。2.进入vite官网。

2401_86637663的博客 1906

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

在vue中通过Echarts封装图表组件

一、需求问题 在开发vue的项目中,我们可能会遇到这样的需求。我们需要去封装一个图表组件,然后这个图表组件在多个不同的页面中都是可以使用的。下面也就是我所封装的图表组件Chart,可以去实现复用。 二、需求分析 我们需要先引用echarts,初始化图表,设置配置项,进行渲染,监视传入的option参数,如果有变化则重新设置配置项,这样一个图表组件就已经封装好了。在其它页面当中,进行图表组件的引入。...

浮生离梦的博客 1917

ercharts一个页面能放几个_解决vue一个页面中复用同一个echarts组件的问题

因为页面中要用echarts图表的地方比较多,所以封装了组件,方便复用,如图:我需要这样一个饼图,并且接下来在很多次地方要用到。直接复制官网的代码,再改改数据,需要用的时候直接拿来用。但是接下来出现了一个问题:如果我在同一个页面多次使用这个组件,图表将不能正常显示。分析了一下, echarts通过id获取对象// 基于准备好的dom,初始化echarts实例var myChart = echart...

weixin_39713833的博客 878

【Vue中使用Echarts】在Vue中优雅的使用Echarts——图表轮播图、Echarts图表组件封装、节流函数优化图表性能

如果没有对插件进行封装,在后期使用插件的时候效率会十分低下也不便于后期对程序的维护拓展,在优雅的使用echarts时,首先,我们考虑到多个地方需要用到echarts,就需要封装一个组件出来,由于每一个图中的属性均由配置项option进行控制,所以我们可以将option选项提取出来,在将来用到图表的时候从父组件传进来,父组件需要做的就是为图标提供一个有大小的盒子,以便于将图表放进盒子内。当然这只是粗略的想法,具体应如何做还要阅读博客中的内容。

一个非常Cool的人 3247

echarts 被封装后多次复用,图表被覆盖,解决方法

多个父级页面使用这个盒子后,发现只有第一个盒子展示图表,但展示的是最后一个图片的样式,其他都空白。为了方便样式统一,封装了一个盒子,其中包含echarts,option是从父组件传来的。将原本id或class选择器改为ref方式,代码如下。

qq_58340302的博客 1243

vueCli-封装Echarts图表组件

写在前面 最近好长时间一直在做可视化项目,我采用的是echarts可视化图表工具画图,一开始由于时间的仓促,还有没有去研究,各方面原因吧,以前每次做图表之类的都没有封装,每次做图表都要从新去配置之类的,写了好多重复代码,感觉很累啊,所以自己把图表封装成子组件使用,代码工作量减轻了很多,而且子组件使用了数据进行监听和图表自适应屏幕大小,这样以后会方便很多了!简直帅到爆,不多说了,上思路和代码。 ...

郝峰vip的博客 1024

vue3使用echarts并封装echarts组件

vue3使用echarts并封装echart组件前言:一、安装并导入echart1.npm下载包2.配置echarts二、使用echarts三、封装echarts为组件 前言: 本文使用的echarts版本为5.3.1,详细文档可见: Echarts 官方文档 文中案例基于vue3编写,有关js部分使用的是"script setup"语法糖形式 一、安装并导入echart 1.npm下载包 npm i echarts --save 2.配置echarts 这里介绍使用 provide 和 inje

weixin_53068161的博客 1万+

Echarts组件初步封装

Echarts组件初步封装

往事随风 1752
上一篇: js如何通过数组中相同的元素12来将原始数组[‘12‘,‘13‘,‘12‘,‘14‘, ‘12‘,‘23‘,‘24‘]返回以相同元素12开头的3个新数组[‘12‘, ‘13‘], [‘12‘, ‘14
下一篇: 表格排序sortable
长箭已搭弓
博客等级 码龄9年 51粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值