vue2中使用echarts示例

37 阅读1分钟

1、安装

npm install echarts --save

2、在main.js中引入(全局引入)

// 引入echarts
import *as echarts from 'echarts'
Vue.prototype.$echarts = echarts

3、使用

需要用到echart的地方先设置一个div的id、宽高

提示:可以在一个页面中引入多个数据报表模板,使用div进行位置的排版放置

4、模板代码

重点注意:其中const option = { }就是我们需要引进echart图表的代码

<template>
  <div>
    <div ref="chart" style="width: 100%;height: 400px;"></div>
  </div>
</template>

要在mounted生命周期函数中实例化echarts对象。确保dom元素已经挂载到页面中,设置宽高。

mounted(){
    this.getEchartData()  
    },
   methods: {
    getEchartData() {
      const chart = this.$refs.chart
      if (chart) {
        const myChart = this.$echarts.init(chart)
        const option = {...}
        myChart.setOption(option)
        window.addEventListener("resize", function() {
          myChart.resize()
        })
      }
       this.$on('hook:destroyed',()=>{
         window.removeEventListener("resize", function() {
          myChart.resize();
        });
        })
    }
  }

5、完整示例

<template>
  <div>
    <div ref="chart" style="width: 100%;height: 400px;"></div>
    <div ref="chart1" style="width: 100%;height: 400px;"></div>
  </div>
</template>

<script>
export default {
  data () {
    return {

    }
  },
  mounted () {
    this.getEchartData()
    this.getEchartData1()
  },
  methods: {
    getEchartData () {
      const chart = this.$refs.chart
      if (chart) {
        const myChart = this.$echarts.init(chart)
        const option = {
          legend: {},
          tooltip: {},
          dataset: {
            source: [
              ['订单', 43.3, 85.8],
              ['订单1', 83.1, 73.4],
              ['订单2', 86.4, 65.2],
              ['订单3', 72.4, 53.9],
              ['订单4', 82.4, 53.9],
              ['订单5', 42.4, 53.9],
              ['订单6', 72.4, 53.9],
              ['订单7', 72.4, 53.9]
            ]
          },
          xAxis: { type: 'category' },
          yAxis: {},
          series: [{ type: 'bar' }, { type: 'bar' }]
        }
        myChart.setOption(option)
        window.addEventListener("resize", function () {
          myChart.resize()
        })
      }
      this.$on('hook:destroyed', () => {
        window.removeEventListener("resize", function () {
          myChart.resize();
        });
      })
    },
    getEchartData1 () {
      const chart1 = this.$refs.chart1
      if (chart1) {
        const myChart = this.$echarts.init(chart1)
        const option = {
          title: {
            text: 'Stacked Line'
          },
          tooltip: {
            trigger: 'axis'
          },
          legend: {
            data: ['Email', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine']
          },
          grid: {
            left: '3%',
            right: '4%',
            bottom: '3%',
            containLabel: true
          },
          toolbox: {
            feature: {
              saveAsImage: {}
            }
          },
          xAxis: {
            type: 'category',
            boundaryGap: false,
            data: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
          },
          yAxis: {
            type: 'value'
          },
          series: [
            {
              name: 'Email',
              type: 'line',
              stack: 'Total',
              data: [120, 132, 101, 134, 90, 230, 210, 120, 132, 101, 134, 90, 230]
            },
            {
              name: 'Union Ads',
              type: 'line',
              stack: 'Total',
              data: [220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290, 330]
            },
            {
              name: 'Video Ads',
              type: 'line',
              stack: 'Total',
              data: [150, 232, 201, 154, 190, 330, 410, 150, 232, 201, 154, 190, 330]
            },
            {
              name: 'Direct',
              type: 'line',
              stack: 'Total',
              data: [320, 332, 301, 334, 390, 330, 320, 320, 332, 301, 334, 390, 330]
            },
            {
              name: 'Search Engine',
              type: 'line',
              stack: 'Total',
              data: [820, 932, 901, 934, 1290, 1330, 1320, 820, 932, 901, 934, 1290, 1330]
            }
          ]
        }
        myChart.setOption(option)
        window.addEventListener("resize", function () {
          myChart.resize()
        })
      }
      this.$on('hook:destroyed', () => {
        window.removeEventListener("resize", function () {
          myChart.resize();
        });
      })
    },
  },
  watch: {},
  created () {
  }
}
</script>

6、效果

image.png