Echart显示封装成组件vue

echarts通用组件

echarts.vue
<template>
  <div style="width: 100%; height: 100%"></div>
</template>

<script setup>
import {
  ref,
  onMounted,
  nextTick,
  onBeforeUnmount,
  onActivated,
  onDeactivated
} from 'vue';
import { useDebounceFn } from '@vueuse/core';
import * as echarts from 'echarts';

const props = defineProps({
  options: {
    type: Object,
    default() {
      return {
        echartsType: 1
      };
    }
  },
  echartRef: {
    type: Object
  }
  //   echartRef: {}
});
const echartsResize = ref();
onMounted(() => {
  nextTick(() => {
    initEchart();
  });
//echart宽度自适应
setTimeout(() => {
    //   this.myCharts();
    const resizeOb = new ResizeObserver((entries) => {
      for (const entry of entries) {
        echarts.getInstanceByDom(entry.target).resize();
      }
    });
    resizeOb.observe(props.echartRef);
  });
});
const initEchart = () => {
  let myChart = echarts.getInstanceByDom(props.echartRef);
  if (myChart === null || myChart === undefined) {
    myChart = echarts.init(props.echartRef);
  }
  useEcharts(myChart, props.options);
};
const useEcharts = (myChart, options) => {
  if (options && typeof options === 'object') {
    myChart.setOption(options, true);
  }
//监听尺寸变化进行重绘
  echartsResize.value = useDebounceFn(() => {
    myChart && myChart.resize();
  }, 100);
  window.addEventListener('resize', echartsResize.value);
};
onBeforeUnmount(() => {
  window.removeEventListener('resize', echartsResize.value);
});

onActivated(() => {
  window.addEventListener('resize', echartsResize.value);
});

onDeactivated(() => {
  window.removeEventListener('resize', echartsResize.value);
});
watch(
  () => props.options,
  (val) => {
    if (val) {
      nextTick(() => {
        initEchart();
      });
    }
  },
  { deep: true }
);
</script>

<style lang="scss" scoped>
.ml-20 {
  margin-left: 20px;
}

.card-phone {
  height: 500px;
  width: 800px;
  margin: 0 auto;
}
</style>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值