vue3封装ECharts组件详解

Vue3封装ECharts组件详解

前言

ECharts是一个非常流行的可视化图表库,它提供了丰富的图表类型和灵活的配置选项,满足了各种数据展示的需求。本文主要介绍如何在Vue3中封装ECharts组件。

准备工作

在使用ECharts之前,需要先安装echarts库。

npm install echarts@^5.1.0

我们还需要安装@vueuse/core库来使用useDebouncedFn方法,防抖函数的使用可以在图表动态交互时提高性能。

npm install @vueuse/core@^5.0.0

封装ECharts组件

我们先把需要的echarts实例引入。

import * as echarts from 'echarts';

为了便于组件复用,我们定义一个基础的ECharts组件,命名为BaseEChart。该组件提供基础的ECharts实例创建和销毁方法,以及重置图表方法。

<template>
  <div class="chart-container" ref="chartRef"></div>
</template>

<script>
import * as echarts from 'echarts';
import { defineComponent } from 'vue';

export default defineComponent({
  props: {
    options: {
      type: Object,
      required: true,
    },
    width: {
      type: [Number, String],
      default: '100%',
    },
    height: {
      type: [Number, String],
      default: '400',
    },
  },
  data() {
    return {
      chart: null,
      chartResizeFn: null,
    };
  },
  computed: {
    chartStyle() {
      return {
        width: typeof this.width === 'string' ? this.width : this.width + 'px',
        height: typeof this.height === 'string' ? this.height : this.height + 'px',
      };
    },
  },
  mounted() {
    this.createChart();
    this.chartResizeFn = this.$utils.useDebouncedFn(() => {
    this.chart?.resize();
    });
    window.addEventListener('resize', this.chartResizeFn);
  },
  updated() {
    this.chart.clear();
    this.chart.setOption(this.options);
  },
  beforeUnmount() {
    if (this.chart) {
      window.removeEventListener('resize', this.chartResizeFn);
      this.chart.dispose();
      this.chart = null;
      this.chartResizeFn = null;
    }
  },
  methods: {
    createChart() {
      this.chart = echarts.init(this.$refs.chartRef);
      this.chart.setOption(this.options);
    },
    resetChart() {
      this.chart.clear();
      this.chart.setOption(this.options);
    },
  },
});
</script>

<style scoped>
.chart-container {
  margin: 0px;
}
</style>

在该基础组件中,我们定义了三个props:

  • options:echarts图表配置。该属性必传。
  • width:图表宽度,默认100%。
  • height:图表高度,默认400。

在mounted生命周期中,我们用echarts.init()方法传入组件的ref属性来创建echarts实例。通过setOption()方法传入options属性来配置图表。定义了一个防抖函数来处理浏览器窗口的resize事件,以达到图表的自适应大小触发的目标。

在updated生命周期中,我们在数据更新后,通过调用clear()方法和setOption()方法来更新图表。

在beforeUnmount生命周期中,我们先在window对象上取消resize事件,然后调用dispose()方法来销毁echarts实例。

使用封装的ECharts组件

我们以一个柱状图的实例来演示如何使用BaseEChart组件。

首先,我们在父组件中引入BaseEChart组件,定义一个名为BarChart的组件。在该组件中,我们引入定义好的BaseEChart组件来实现柱状图的封装。

<template>
  <div class="chart-block">
    <h3 class="chart-title">{{ title }}</h3>
    <base-echart
      :options="options"
      :width="width"
      :height="height"
    />
  </div>
</template>

<script>
import BaseEChart from '@/components/BaseEChart.vue';
import { defineComponent } from 'vue';

export default defineComponent({
  name: 'BarChart',
  components: {
    BaseEChart,
  },
  props: {
    data: {
      type: Array,
      required: true,
    },
    title: {
      type: String,
      default: '',
    },
    xAxisName: {
      type: String,
      default: '',
    },
    yAxisName: {
      type: String,
      default: '',
    },
    width: {
      type: [Number, String],
      default: '100%',
    },
    height: {
      type: [Number, String],
      default: '400',
    },
  },
  computed: {
    options() {
      return {
        xAxis: {
          type: 'category',
          data: this.data.map((item) => item.name),
          name: this.xAxisName,
        },
        yAxis: {
          type: 'value',
          name: this.yAxisName,
        },
        series: [
          {
            type: 'bar',
            data: this.data.map((item) => item.value),
          },
        ],
      };
    },
  },
});
</script>

<style scoped>
.chart-block {
  margin: 10px;
}
.chart-title {
  margin: 0 0 10px;
  font-size: 16px;
}
</style>

在该组件中,我们定义了六个props:

  • data:柱状图的数据。该属性必传。
  • title:柱状图的标题。默认为空。
  • xAxisName:x轴的名称。默认为空。
  • yAxisName:y轴的名称。默认为空。
  • width:图表宽度。默认100%。
  • height:图表高度。默认400。

在该组件中,我们重新定义了计算属性options,根据传递的data属性和其他属性来返回echarts图表的配置,比如图表类型、x轴、y轴、系列等。

定义完成后我们就可以在父组件中引入该柱状图组件,并传入相关参数,从而展示一个基础的柱状图。

<template>
  <div>
    <h2 class="page-title">柱状图1</h2>
    <bar-chart
      :data="data"
      title="柱状图示例"
      xAxisName="X轴"
      yAxisName="Y轴"
    />
  </div>
</template>

<script>
import BarChart from '@/components/BarChart.vue';
import { defineComponent } from 'vue';

export default defineComponent({
  name: 'SamplePage',
  components: {
    BarChart,
  },
  data() {
    return {
      data: [
        {name: '测试1', value: 10},
        {name: '测试2', value: 20},
        {name: '测试3', value: 30},
        {name: '测试4', value: 40},
        {name: '测试5', value: 50},
      ],
    };
  },
});
</script>

在这个示例中,我们引入刚才定义的柱状图组件,并传入了必需的data属性,以及可选的标题和轴名称等属性,以实现基础的柱状图展示。

结语

通过以上步骤,我们已经成功的封装了一个基础的ECharts组件,并且实现了一个柱状图的示例。在实际项目中,我们可以定义不同样式的图表组件,来满足各种数据可视化展示的需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3封装ECharts组件详解 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • js之global对象方法

    当然,我很乐意为您提供有关“JavaScript中的全局对象方法”的完整攻略。以下是详细的步骤和两个示例: 1 全局对象 在JavaScript中,全局对象指在任何地方都可以访问的对象。在浏览器中,全局对象是window对象,在Node.js中,全局对象是global对象。 2 global对象方法 global对象在Node.js中非常有用,因为它提供了许…

    other 2023年5月6日
    00
  • prometheus安装

    Prometheus安装的完整攻略 Prometheus是一款开源的监控系统,用于监控各种应用程序和系统组件。本文将介绍如何在Linux系统上安装和配置Prometheus,包括以下步骤: 安装Prometheus 配置Prometheus 添加监控目标 示例1:监控Node.js应用程序 示例2:监控MySQL数据库 步骤1:安装Prometheus 在L…

    other 2023年5月8日
    00
  • Altera Quartus II 15.0安装

    Altera Quartus II 15.0安装 Altera Quartus II是一款著名的FPGA开发工具,用于构建数字电路系统的设计和仿真。本文将介绍如何在Windows系统上安装Altera Quartus II 15.0版本。 安装前准备 在开始安装之前,您需要做好以下准备工作: 确保您的计算机符合Altera Quartus II 15.0的最…

    其他 2023年3月28日
    00
  • ExtJS 配置和表格控件使用第2/2页

    关于“ExtJS 配置和表格控件使用第2/2页”的完整攻略,我整理了以下内容供您参考。 配置 在使用 ExtJS 的过程中,有很多配置项可以使用。这些配置项可以帮助我们快速地定制我们的组件。以下是一些常用配置项: height:高度 width:宽度 renderTo:渲染到的元素ID layout:布局方式 title:标题 iconCls:图标 另外,我…

    other 2023年6月27日
    00
  • passwd总结

    以下是关于“passwd总结”的完整攻略,包括定义、使用方法、示例说明和注意事项。 定义 passwd是一个Linux/Unix系统中的命令,用于更改用户的密码。它可以让用户更改自己的密码,也可以让管理员更改其他用户的密码。 使用方法 使用passwd命令更改密码的方法如下: 更改自己的密码 如果要更改自己的密码,可以在终端或命令行窗口中输入以下命令: ba…

    other 2023年5月8日
    00
  • 基于java构造方法Vector遍历元素源码分析

    基于Java构造方法Vector遍历元素源码分析攻略 1. 简介 在Java中,Vector是一个动态数组,它实现了List接口。Vector类提供了多个构造方法,其中一个构造方法可以用于创建一个Vector对象并初始化元素。本攻略将详细讲解如何使用Java构造方法创建Vector对象,并遍历其中的元素。 2. 构造方法 Vector类提供了以下构造方法用于…

    other 2023年8月6日
    00
  • 验证手机号码的js方法

    验证手机号码的js方法 随着移动互联网的快速发展,手机成为人们生活中必不可少的一部分。在开发网站或移动端应用时,手机号码验证是一个非常常见的需求。在本篇文章中,将介绍如何使用JS来验证手机号码的有效性。 使用正则表达式验证手机号码 JS中,可以使用正则表达式来验证手机号码格式是否正确。下面是一个验证手机号码格式的正则表达式: /^1\d{10}$/ 正则表达…

    其他 2023年3月28日
    00
  • Windows系统恢复系统默认的环境变量图文教程

    下面是详细讲解“Windows系统恢复系统默认的环境变量图文教程”的完整攻略。 Windows系统恢复系统默认的环境变量 什么是环境变量? 环境变量指的是在操作系统中已经存在的一些具有全局意义的变量,可以被所有的程序所访问和使用。在Windows操作系统中,环境变量主要分为两类:用户环境变量和系统环境变量。用户环境变量是针对当前用户的环境变量,而系统环境变量…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部