当前位置:网站首页>echart简单组件封装

echart简单组件封装

2022-07-06 10:24:00 bug丸

echart简单组件封装

<template>
  <div class="chartBox" ref="echartBox"></div>
</template>

<script>
import * as echarts from 'echarts'
export default {
  props: {
​    barData: {
​      type: Array,
​      default: () => []
​    }
  },
  watch: {
​    barData: {
​      handler: function() {
​        this.initChart()
​      },
​      deep: true
​    }
  },
  mounted() {
​    this.initChart()
  },
  methods: {
​    initChart() {
​      const dom = this.$refs.echartBox
​      const myChart = echarts.init(dom)
​      myChart.setOption({
​        xAxis: {
​          type: 'category',
​          data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
​        },
​        yAxis: {
​          type: 'value'
​        },
​        series: [
​          {
​            data: this.barData,
​            type: 'bar'
​          }
​        ]
​      })
​    }
  }
}

</script>
<style scoped>
.chartBox {
  width: 400px;
  height: 300px;
}
</style>

遇到的问题

封装的echart组件复用时,会警告:

上述代码如果我将this.$ref 改为 document.querySelector;那么浏览器会出来一条警告,而且只会渲染出一个图

警告内容: There is a chart instance already initialized on the dom.

      //   const dom = this.$refs.echartBox
      const dom = document.querySelector('.chartBox')

解决方式:

方式1:this.$refs

如同开始部分的代码

方式2:传入一个唯一的className或id,用来区分

<div class="chartBox" :id="eID"></div>

  props: {
    eID: {
      type: String,
      default: ''
    }
  },

  const dom = document.querySelector('#' + this.eID)
原网站

版权声明
本文为[bug丸]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_50576800/article/details/125629842