vue之将echart封装为组件

yizhihongxing

封装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日

相关文章

  • vue3 typescript封装axios过程示例

    关于“vue3 typescript封装axios过程示例”的完整攻略,以下是步骤: 一、安装依赖 在Vue3项目中,先安装vue3,使用命令:npm install vue@next –save 安装typescript,使用命令:npm install typescript –save-dev 安装axios,使用命令:npm install axi…

    Vue 2023年5月28日
    00
  • 详解Vue 全局变量,局部变量

    详解Vue 全局变量,局部变量 在Vue应用中,有时需要在各个组件之间共享全局的数据,同时也需要在某些组件内部使用局部的数据,这就需要用到Vue的全局变量和局部变量了。 全局变量 全局变量是指可以在任何Vue组件中使用的变量。要定义全局变量,我们需要在Vue实例中定义一个全局对象,然后在这个对象上添加变量。 // 定义全局对象 Vue.prototype.$…

    Vue 2023年5月28日
    00
  • Vue项目分环境打包的实现步骤

    实现Vue项目的环境分离,可以很好地满足开发、测试和生产环境的需求,同时也能提高代码的重用性和可维护性。以下是Vue项目分环境打包的实现步骤: 1. 创建环境变量配置文件 在Vue项目的根目录下,创建一个.env文件,用来存放全局的环境变量配置。同时在.env文件中定义两个变量:VUE_APP_API_URL和VUE_APP_DEBUG_MODE。其中,VU…

    Vue 2023年5月27日
    00
  • vue中如何实现拖拽调整顺序功能

    首先我们需要理解Vue中拖拽调整顺序的工作原理和步骤。通常的实现方式是用Vue的指令v-for生成一个列表,然后通过给每个列表项添加拖放事件来实现拖拽和调整顺序。 以下是实现vue中拖拽调整顺序的具体步骤: 第一步:安装依赖 在Vue项目中需要使用vue-dragscroll和vuedraggable这两个库,因此需要先进行安装。 npm install -…

    Vue 2023年5月28日
    00
  • Spring Boot集成Shiro实现动态加载权限的完整步骤

    下面我将为您详细讲解Spring Boot集成Shiro实现动态加载权限的完整步骤。 一、引入依赖 在Spring Boot项目中,需要引入以下依赖: <!– shiro依赖 –> <dependency> <groupId>org.apache.shiro</groupId> <artifactId…

    Vue 2023年5月28日
    00
  • Vue的export default和带返回值的data()及@符号的用法说明

    我来详细讲解一下Vue中的”export default”、带返回值的”data()”及”@符号”的用法说明。 export default 在Vue中,如果我们需要把一个Vue组件公开成一个模块(module),我们可以使用JavaScript的”export”语句。在Vue中,我们通常使用”export default”来导出一个Vue组件。 示例1: …

    Vue 2023年5月27日
    00
  • Vue模拟响应式原理底层代码实现的示例

    下面我将为你详细讲解“Vue模拟响应式原理底层代码实现的示例”的完整攻略。 什么是Vue模拟响应式原理 在Vue框架中,响应式原理是Vue实现数据绑定的重要原理,它通过数据劫持、观察者模式等技术实现了数据的变化能够自动地触发视图的更新。 在实际开发中,我们有时需要自己实现响应式原理,并且Vue框架的响应式原理实现也是值得我们去学习的。 实现方法 Vue官方提…

    Vue 2023年5月27日
    00
  • Vue组件中prop属性使用说明实例代码详解

    Vue组件中的prop属性用于向组件传递数据,是组件通信的一种方式。在使用prop属性时,需要在组件实例的props选项中声明传递的属性及其类型。本篇攻略将详细讲解Vue组件中prop属性的使用说明,并提供实例代码作为示例。 1. 声明prop属性 在Vue组件中使用prop属性需要在组件的props选项中声明传递的属性及其类型。例如下面的代码是声明一个名为…

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