【封装echarts】vue中使用echarts

注意点:

以下三个问题解决方法

  1. 刷新变大
  2. 屏幕 resize
  3. echarts 自适应
  4. 解决echarts警告提示 echarts.js?1be7:2168 There is a chart instance already initialized on the dom.
    在这里插入图片描述

父组件中使用

如果options里面是动态数据,请放在computed

在这里插入图片描述
动态数据加载 ajax,监听options
在这里插入图片描述
警告报错
解决echarts警告提示 echarts.js?1be7:2168 There is a chart instance already initialized on the dom.在这里插入图片描述

echarts组件

<template>
  <div>
    <div :id="chartId" :style="{ width: width, height: height }"></div>
  </div>
</template>

<script>
export default {
  name: 'MyChart',
  props: {
    chartId: {
      type: String,
      required: true,
    },
    width: {
      type: String,
      default: '',
    },
    height: {
      type: String,
      default: '500px',
    },
    chartOptions: {
      type: Object,
      required: true,
    },
  },
  watch: {
    chartOptions: {
      handler(_n, _o) {
        this.createChart();
      },
      deep: true,
    },
  },
  mounted() {
    // 说明你刚进来初始化的时候echarts获取到dom的宽就是那么宽,
    // 可能你的容器还没完全加载完,可以给容器固定百分比宽,或者加载方法都调用完在$nextTick里给所有图表resize
    this.$nextTick(() => {
      this.createChart();
    });
  },
  methods: {
    createChart() {
      // 基于准备好的dom,初始化echarts实例
      //有的话就获取已有echarts实例的DOM节点。
      let chart = this.$echarts.getInstanceByDom(document.getElementById(this.chartId));
      if (chart == null) {
        // 如果不存在,就进行初始化
        chart = this.$echarts.init(document.getElementById(this.chartId));
      }
      chart.setOption(this.chartOptions);
      window.addEventListener('resize', () => {
        chart.resize();
      });
    },
  },
};
</script>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值