vue.js 对 echarts 进行组件化,简单易用

npm i echarts

npm i element-resize-detector

组件:

<template>
  <div :class="className"></div>
</template>

<script>
import { merge } from "lodash";
import * as echarts from "echarts";
import ResizeListener from "element-resize-detector";

export default {
  name: "Chart",
  props: {
    options: {
      type: Object,
      default: () => ({}),
    },
    className: {
      type: String,
      default: 'def'
    },
  },
  data() {
    return {
      chart: null,
    };
  },
  watch: {
    options: {
      deep: true,
      handler() {
        this.updateChartView();
      },
    },
  },
  mounted() {
    this.chart = echarts.init(this.$el);
    this.updateChartView();
    window.addEventListener("resize", this.handleWindowResize);
    this.addChartResizeListener();
  },
  beforeDestroy() {
    window.removeEventListener("resize", this.handleWindowResize);
  },
  methods: {
    myChart(){
      return this.chart
    },
    mergeOption() {
      return merge(
        {
          //backgroundColor: "#ffffff",
          textStyle:{
            color:'#A5D7FA',
            fontSize:15
          }
        },
        this.options
      );
    },

    //对chart元素尺寸进行监听,当发生变化时同步更新echart视图
    addChartResizeListener() {
      const instance = ResizeListener({
        strategy: "scroll",
        callOnAdd: true,
      });

      instance.listenTo(this.$el, () => {
        if (!this.chart) return;
        this.chart.resize();
      });
    },

    //更新echart视图
    updateChartView() {
      if (!this.chart) return;
      this.chart.setOption(this.mergeOption(), true);
    },

    // 当窗口缩放时,echart动态调整自身大小
    handleWindowResize() {
      if (!this.chart) return;
      this.chart.resize();
    },
  },
};
</script>
<style lang="less" scoped>
.def {
  width: 100%;
  height: 100%;
}
</style>

使用:

引用

import eChart from '@/components/echarts.vue'
Vue.component('e-chart', eChart)
<e-chart :options="options" style="height:265px"/>

export default {
data() {
    return {
      options:{}
    }
  },
}

图表有更新,改变options的值即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值