vue中,swiper(vue-awesome-swiper)与echarts结合使用,echarts有些图不显示问题

当在Vue项目中使用vue-awesome-swiper与echarts结合时,若设置swiper的loop属性为true,可能导致echarts图表不显示。这是因为swiper的loop模式会复制slide,使echarts实例的ID重复。解决方法是通过获取并初始化每个唯一的echarts实例,对非复制的图表直接初始化,对复制的图表则使用对应的原始实例进行setOption操作。
摘要由CSDN通过智能技术生成

vue中,swiper(vue-awesome-swiper)与echarts结合使用,echarts有些图不显示问题

echarts绘制的图不显示是因为,swiper的loop设置为true了。因为swiper的loop模式:会在原本slide前后复制若干个slide(默认一个)并在合适的时候切换,让Swiper看起来是循环的。所以复制出来的slide导致原本设置的echarts的id不在是唯一的,echarts绘制的图也就显示不出来了。

解决方案:

let myEchart = document.getElementsByClassName('myEchart');
myEchart.map((item, index) => {
	let chart = echarts.init(myEchart[index]);
	chart.setOption(option);
})

如果你的echarts图是写在组件里的那么你可以这样做:

html部分:

<swiper :options="swiperOption">
  <swiper-slide v-for="(item, index) in dataList" :key="index">
      <meterChart :divId="'meterChart' + index" :ref="'meterChart' + index" :data="item.value"></meterChart>
  </swiper-slide>
</swiper>

js部分:


  watch: {
    /*
      这么做是因为,swiper结合echarts使用时,echarts有的图片不显示。
      echarts图不显示的原因是,swiper的loop设为了true。
      swiper的loop模式:会在原本slide前后复制若干个slide(默认一个)并在合适的时候切换,
      让Swiper看起来是循环的。
      复制导致echarts的ID不再是唯一的了,
      正是因为这个原因echarts图才不显示的。
    */
    dataList(val) {
      this.$nextTick(() => {
        let meterChart = document.getElementsByClassName('meterChart');

        /*
          num为中间值,用于判断哪些echarts图是复制的。
          对于复制来的echarts,使用其所复制的那个echarts来执行其setOption方法。
          对于非复制的echarts,直接用其自身来调用setOption方法。
          因为echarts图我是写在组件(meterChart组件)里的,所以执行setOption方法时传入的option,
          其实也是写在组件(meterChart组件)里的,
          所以要使用$refs来调用子组件(meterChart组件)内部的option方法。
        */
        let num = meterChart.length / 2;
        meterChart.forEach((item, index) => {
          // 复制得来的echarts
          if (index > num) {
            /*
              使用其所复制的那个echarts来执行其setOption方法。
            */
            let dom = this.$refs[`meterChart${index - num}`];
            var myChart = echarts.init(meterChart[index]);
            myChart.setOption(dom[0].option());
          }
          // 非复制的echarts
          else {
            let dom = this.$refs[`meterChart${index}`];
            var myChart = echarts.init(meterChart[index]);
            myChart.setOption(dom[0].option());
          }
        })
      });
    }
  }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值