vue之将echart封装为组件

封装echarts为Vue组件并不难,只需要遵循以下步骤即可。

步骤1:安装echarts和vue-echarts

使用npm安装echarts和vue-echarts依赖:

npm install echarts vue-echarts --save

步骤2:创建一个Echarts.vue组件

在src/components目录下创建一个Echarts.vue的文件,代码如下:

<template>
  <div ref="chartDom" style="width:100%;height:100%;"></div>
</template>

<script>
import echarts from 'echarts';
import 'echarts-gl';
import VueECharts from 'vue-echarts'

export default {
  name: 'Echarts',
  extends: VueECharts,

  props: {
    options: {
      type: Object,
      default() {
        return {};
      }
    }
  },

  created() {
    if (this.options) {
      this.chartOptions = this.options;
    }
  },

  mounted() {
    this.initChart();
  },

  methods: {
    initChart() {
      if (this.chart) {
        this.chart.clear();
      } else {
        this.chart = echarts.init(this.$refs.chartDom);
      }
      this.chart.setOption(this.chartOptions);
      this.$emit('ready', this.chart, echarts);
    }
  }
};
</script>

这段代码中,将echarts封装为了一个Vue组件。该组件使用vue-echarts库的VueECharts对象实现了对ECharts的集成。

该组件接受一个options属性,用于设置echarts的配置项。在mounted()钩子函数中,使用echarts.init()方法初始化echarts,并在initChart()方法中通过setOption()方法设置options。

同时可以看到,当Echarts实例化后,组件会触发一个事件ready,可以用来传递Echarts的实例和echarts对象library。

步骤3:使用Echarts.vue组件

在其他组件中使用Echarts.vue组件,并传递options属性。

<template>
  <div>
    <Echarts :options="options" @ready="onReady" />
  </div>
</template>

<script>
import Echarts from '@/components/Echarts.vue';

export default {
  name: 'MyComponent',

  components: {
    Echarts
  },

  data() {
    return {
      options: {...}
    };
  },

  methods: {
    onReady(chart, echarts) {
      console.log(chart);
      console.log(echarts);
    }
  }
};
</script>

这段代码中,使用了Echarts组件,并传递了一个options属性。同时也可以看到,当Echarts组件实例化后,会触发一个事件ready,可以在onReady()函数中获取到Echarts的实例以及echarts对象。

示例1:简单柱状图

<template>
  <div>
    <Echarts :options="options" />
  </div>
</template>

<script>
import Echarts from '@/components/Echarts.vue';

export default {
  name: 'MyComponent',

  components: {
    Echarts
  },

  data() {
    return {
      options: {
        title: {
          text: '某地区蒸发量和降水量'
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'shadow'
          }
        },
        grid: {
          left: '3%',
          right: '4%',
          bottom: '3%',
          containLabel: true
        },
        legend: {
          data: ['蒸发量', '降水量']
        },
        xAxis: [
          {
            type: 'category',
            data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
            axisTick: {
              alignWithLabel: true
            }
          }
        ],
        yAxis: [
          {
            type: 'value'
          }
        ],
        series: [
          {
            name: '蒸发量',
            type: 'bar',
            data: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
          },
          {
            name: '降水量',
            type: 'bar',
            data: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]
          }
        ]
      }
    };
  }
};
</script>

示例2:复杂组合图表

<template>
  <div>
    <Echarts :options="options" />
  </div>
</template>

<script>
import Echarts from '@/components/Echarts.vue';

export default {
  name: 'MyComponent',

  components: {
    Echarts
  },

  data() {
    return {
      options: {
        title: {
          text: '某地区蒸发量和降水量',
          subtext: '纯属虚构'
        },
        tooltip: {
          trigger: 'axis'
        },
        legend: {
          data: ['蒸发量', '降水量', '平均温度']
        },
        toolbox: {
          show: true,
          feature: {
            mark: { show: true },
            dataView: { show: true, readOnly: false },
            magicType: { show: true, type: ['line', 'bar'] },
            restore: { show: true },
            saveAsImage: { show: true }
          }
        },
        calculable: true,
        xAxis: [
          {
            type: 'category',
            boundaryGap: false,
            data: [
              '周一',
              '周二',
              '周三',
              '周四',
              '周五',
              '周六',
              '周日'
            ]
          }
        ],
        yAxis: [
          {
            type: 'value',
            axisLabel: {
              formatter: '{value} ml'
            }
          },
          {
            type: 'value',
            axisLabel: {
              formatter: '{value} °C'
            }
          }
        ],
        series: [
          {
            name: '蒸发量',
            type: 'bar',
            data: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6],
            markPoint: {
              data: [
                { type: 'max', name: '最大值' },
                { type: 'min', name: '最小值' }
              ]
            },
            markLine: {
              data: [
                { type: 'average', name: '平均值' }
              ]
            }
          },
          {
            name: '降水量',
            type: 'bar',
            yAxisIndex: 0,
            data: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6],
            markPoint: {
              data: [
                { name: '年最高', value: 182.2, xAxis: 7, yAxis: 183, symbolSize: 18 },
                { name: '年最低', value: 2.3, xAxis: 11, yAxis: 3 }
              ]
            },
            markLine: {
              data: [
                { type: 'average', name: '平均值' },
                [
                  {
                    symbol: 'none',
                    x: '90%',
                    yAxis: 'max'
                  },
                  {
                    symbol: 'circle',
                    label: {
                      position: 'start',
                      formatter: '最大值'
                    },
                    type: 'max',
                    name: '最高点'
                  }
                ]
              ]
            }
          },
          {
            name: '平均温度',
            type: 'line',
            yAxisIndex: 1,
            data: [11, 11, 15, 13, 12, 13, 10],
            markPoint: {
              data: [
                { name: '周最低', value: -2, xAxis: 1, yAxis: -1.5 }
              ]
            },
            markLine: {
              data: [
                { type: 'average', name: '平均值' },
                [
                  {
                    symbol: 'none',
                    x: '90%',
                    yAxis: 'max'
                  },
                  {
                    symbol: 'circle',
                    label: {
                      position: 'start',
                      formatter: '最高点'
                    },
                    type: 'max',
                    name: '最高点'
                  }
                ]
              ]
            }
          }
        ]
      }
    };
  }
};
</script>

以上就是将echarts封装为Vue组件的完整攻略以及两个示例,如果还需要更加详细的使用说明可以查看vue-echarts的官方文档

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue之将echart封装为组件 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue的插槽原来该这样理解

    当我们在开发Vue组件时,有些情况下需要动态地处理组件内部的内容。Vue提供了插槽( Slot )来解决这个问题。通过使用插槽,我们可以将父组件中的任意内容插入子组件中的指定位置,从而实现一种非常灵活的组件封装和组合方式。 一、插槽的用法和基本原理 1.1 插槽基础使用 插槽的基本原理是以 标签作为承载位置,用于显示父组件中传递过来的内容。 下面是一个例子:…

    Vue 2023年5月29日
    00
  • vue自定义可选时间的日历组件

    下面是详细讲解“vue自定义可选时间的日历组件”的完整攻略,过程中将包含两个示例说明。 简介 日历组件是一个常见的组件,它允许用户选择日期或时间,展示当前日期和月份等信息。Vue.js是一种前端框架,可以很好地支持日历组件的开发。有时候我们需要自定义可选时间的日历组件,以满足项目需求,接下来将介绍实现自定义可选时间的日历组件的步骤。 步骤 安装和导入依赖 首…

    Vue 2023年5月28日
    00
  • Vue项目代码之路由拆分、Vuex模块拆分、element按需加载详解

    我来为你详细讲解“Vue项目代码之路由拆分、Vuex模块拆分、element按需加载详解”的完整攻略。 路由拆分 当我们的项目变得越来越复杂时,路由也会变得越来越庞大。为了更好地维护我们的代码,我们可以考虑将路由进行拆分。 首先,我们可以在项目根目录下新建一个router文件夹,用来存放路由相关的文件。接着,我们可以在这个文件夹下新建一个index.js文件…

    Vue 2023年5月27日
    00
  • 基于vue-cli3创建libs库的实现方法

    首先,创建一个基于vue-cli3的JavaScript库,需要按照以下步骤进行: 步骤一: 创建项目 使用vue-cli3脚手架创建一个新项目,并选取默认配置(Default、Manually select features、Config files)。 vue create libs-project 步骤二: 配置项目 通过以下命令,在项目根目录下创建v…

    Vue 2023年5月29日
    00
  • Vue3生命周期钩子函数详解

    Vue3生命周期钩子函数详解 Vue3的生命周期函数是在组件渲染过程中执行的一系列函数,它们允许我们在组件的不同阶段执行自定义的代码逻辑。 Vue3中的生命周期函数与Vue2中的生命周期函数在名称和行为方面都有所改变。 生命周期钩子函数一览 总的来说,Vue3中有8个生命周期函数,这些生命周期函数按照它们执行的时间点被分为三类: 创建期(creation):…

    Vue 2023年5月27日
    00
  • vue如何将字符串的一部分处理为html文档并渲染到页面

    处理字符串并将其渲染为 HTML 文档是 Vue 项目中常用的技巧之一。主要应用于如何在 Vue 组件中动态渲染 HTML 内容,例如在博客系统中渲染富文本内容等。 实现方式有多种,下面介绍两种比较简单和易于理解的实现方式。 第一种方式:使用 v-html Vue 通过指令 v-html 提供了将 HTML 字符串渲染为页面元素的功能。 使用 v-html …

    Vue 2023年5月27日
    00
  • Vue3.0利用vue-grid-layout插件实现拖拽布局

    下面我将详细讲解“Vue3.0利用vue-grid-layout插件实现拖拽布局”的完整攻略。 什么是vue-grid-layout插件? vue-grid-layout插件是一个基于Vue.js的实现可拖拽和可调整大小的网格布局的插件。它提供了一个理想的网格系统,具有最小的劳动力和最小的障碍。在Vue3.0版本中使用vue-grid-layout插件可以快…

    Vue 2023年5月29日
    00
  • 在vue中使用setInterval的方法示例

    在Vue中使用setInterval来执行周期性任务的方法如下: 在Vue组件的mounted钩子函数中,调用setInterval方法设置周期性任务的执行函数和时间间隔,同时将返回的计时器ID保存到组件的data对象中。 <template> <div>{{ count }}</div> </template&gt…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部