Vue项目中如何优雅地封装Echarts

1,467 阅读3分钟

安装 echarts 依赖

先 cd 到你的项目下,然后在终端输入以下代码,安装相关依赖。

  • npm 安装
npm install echarts
  • yarn 安装
yarn add echarts

新建基础组件

下图是一个最基本的 vue 的目录结构,在项目根目录下的 src/components 中新建一个 Chart.vue 组件。

base-content-constructor.png

该组件的作用是加载并初始化 echarts 容器,并根据配置的变化更新图表。

下图为 Chart.vue 组件中的配置:

chart2.png

上图中的代码都表示什么意思呢?

  1. 首先,为了能使用 echarts,我们需要先 import 它;
  1. echarts 官网中规定,要想使 echart 生效,需要一个 dom 元素作为容器并调用它的 init 方法才能进行初始化,那么在 vue 中要想获取 dom 元素就必须给对应标签中添加 ref 属性;
  1. ref 中保存的元素需要在 dom 加载完成后才会有值,所以可以在 mounted 生命周期中获取;
  1. 接着创建一个 props 属性 options,该属性用来接收父组件传过来的配置;
  1. 这时,虽然 Chart.vue 组件能用了,但是当 options(这里的 options 相当于后端传过来的数据)发生变化时,图表不会跟着刷新,为了让图表实时刷新,可以使用 vue 中的 watch;
  1. echarts 官网规定 echarts 容器必须加宽高,否则不能正常显示图表。

下方为源码:

<template>
  <div id="chart">
    <div ref="echartRef" class="chart"></div>
  </div>
</template>

<script>
  import * as echarts from 'echarts';
  export default {
    data() {
      return {
        chart: null,
      };
    },
    props: {
      options: {
        type: Object,
        default: () => {},
      },
    },
    mounted() {
      // dark 为暗黑模式,不需要可以不加
      const chart = echarts.init(this.$refs.echartRef, 'dark');
      this.chart = chart;
      this.chart.setOption(this.options);
    },
    watch: {
      options: {
        handler: function(newOption) {
          this.chart.setOption(newOption);
        },
        deep: true,
      },
    },
  };
</script>
<style scoped>
  .chart {
    width: 50%;
    height: 300px;
    background-color: #bee7e9;
  }
</style>

新建饼图配置文件

说明:以下内容都以饼图为例进行讲解,掌握后,使用者可以自行添加其他类型的图表组件。

完成上一步后,假设现在需要在页面展示一个饼图,可以按照以下步骤来做:

在 src 下新建一个 charts 文件夹,然后在该文件夹下新建一个 pieOptions.js 文件,如下图所示:

pieOptionsJs.png

然后去 echarts 官网,找一个饼图的配置,并把配置粘贴上去,下图是 pieOptions.js 中的内容:

pie-ex.png

新建一个饼图组件

接着,以饼图为例,在 src/components 下新建一个 PieChart.vue 组件,创建此组件的目的是为了复用,以后遇到生成饼图的需求,都可以直接调用此组件。

pieP.png

下图为 PieChart.vue 组件对应内容: pieChart.png

下方为源码:

<template>
  <div id="pie-chart">
    <Chart :options="pieOptions"></Chart>
  </div>
</template>

<script>
import pieOptions from '../charts/pieOptions';
import Chart from "./Chart.vue";
export default {
  data() {
    return {
      pieOptions
    }
  },
  components: { Chart },
};
</script>

<style scoped lang="scss"></style>

在 App.vue 中使用

最后,我们在 App.vue 或其他 .vue 文件中引用刚刚创建好的饼图组件就可以了,代码如下:

App.vue 的位置:

appP.png

App.vue 中的代码:

app-content.png 执行 npm run serve 或者 yarn serve (取决于你的 package.json 中定义的脚本是什么)运行代码,至此,一个简单的页面就完成了,效果如下图:

show-page2.png

说明:为了演示效果,我给页面背景加了灰色,实际开发中根据需求来配置就行。

各组件关系图

为了便于大家理解,我画了上面出现的几个组件的关系图,大家可以对照这个图再梳理一遍他们之间的关系,首先 App.vue 引用了 PieChart.vue,然后 PieChart.vue 又引用了 Chart.vue 和 pieOptions.js。

relation-grahp1.png