Vue 如何快速上手ECharts图表到项目

参考

官方文档参考:https://www.echartsjs.com/zh/tutorial.html#%E5%9C%A8%20webpack%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts
微信截图_20200306183006.png

准备

所用到的第三方插件的安装:

cnpm i echarts --save
// 这个插件用在页面内容发生变化时,重新绘制图表
cnpm i resize-detector --save
// 一个函数辅助库
cnpm i lodash --save

简单使用

<template>
  <div ref="main"></div>
</template>

<script>
import echarts from "echarts";
export default {
    mounted() {
        // var myChart = echarts.init(document.getElementById('main'));
        // vue 中快速获取DOM元素
        this.myChart = echarts.init(this.$refs.main);
        this.myChart.setOption({
                title: {
                  text: "ECharts 入门示例"
                },
                tooltip: {},
                xAxis: {
                  data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
                },
                yAxis: {},
                series: [
                  {
                    name: "销量",
                    type: "bar",
                    data: [5, 20, 36, 10, 10, 20]
                  }
                ]
              });
    }
}
</script>

高级使用

1、为了方便扩展复用,这里我们做成一个公用的Commponents组件 EChartsVue.vue

<!-- 图表 -->
<template>
  <div ref="main"></div>
</template>

<script>
import echarts from "echarts";
import { addListener, removeListener } from "resize-detector";
import debounce from "lodash/debounce";
export default {
  props: {
    chartOption: {
      type: Object,
      default: () => {}
    }
  },
  watch: {
    chartOption(val) {
      // 观察options的变化
      this.myChart.setOption(val);
    }
    // 深度监听内部数据的变化,响应式
    // chartOption: {
    //   handler(val) {
    //     this.myChart.setOption(val);
    //   },
    //   deep: true
    // }
  },
  created() {
    this.resize = debounce(this.resize, 300);
  },
  mounted() {
    this.renderChart();
    addListener(this.$refs.main, this.resize);
  },
  methods: {
    resize() {
      console.log("resize计算");
      this.myChart.resize();
    },
    renderChart() {
      // 基于准备好的dom,初始化echarts实例
      this.myChart = echarts.init(this.$refs.main);
      this.myChart.setOption(this.chartOption);
    }
  },
  
  // 释放资源防止溢出
  beforeDestroy() {
    removeListener(this.$refs.main, this.resize);
    this.myChart.dispose();
    this.myChart = null;
  }
};
</script>
<style scoped>
/* @import url(); 引入css类 */
</style>

2、引用组件,给个自定义样式

<div>
  <EChartsVue :chartOption="homeOptions" style="height:400px;" />
</div>

<script>
import EChartsVue from "../components/ECharts.vue";
export default {
    components: {
      EChartsVue
    },
    data() {
        return {
        // 这里还是使用MOCK数据
          homeOptions: {
            title: {
              text: "ECharts 入门示例"
            },
            tooltip: {},
            xAxis: {
              data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
            },
            yAxis: {},
            series: [
              {
                name: "销量",
                type: "bar",
                data: [5, 20, 36, 10, 10, 20]
              }
            ]
          }
        };
      },
     mounted() {
      // 这个请求接口数据。。。并赋值转换对象就可以。这里随机数模拟对象
        this.interval = setInterval(() => {
        this.homeOptions.series[0].data = this.homeOptions.series[0].data.map(
            () => random(100)
        );
        this.homeOptions = { ...this.homeOptions };
        }, 1000);
      },
      beforeDestroy() {
        clearInterval(this.interval);
      }
};
}
</script>


结束

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值