Vue实现ECharts动态渲染多个图表,并可以联动

开局一张图

在这里插入图片描述
实现比较简单,主要是遍历时动态绑定ref,然后再遍历数据渲染就OK了
下面是全部代码

<template>
  <div>
    <div class="chart-wrap">
      <!-- 动态设置ref -->
      <div v-for="(item, index) in data" :key="index" class="chart" :ref="`chart_${index}`"></div>
    </div>
  </div>
</template>

<script>
import * as echarts from 'echarts'

export default {
  name: 'echarts',
  data () {
    return {
      data: [[
        { value: 1048, name: '语文' },
        { value: 735, name: '数学' },
        { value: 580, name: '英语' },
        { value: 484, name: '物理' },
        { value: 300, name: '化学' }
      ], [
        { value: 654, name: '语文' },
        { value: 456, name: '数学' },
        { value: 674, name: '英语' },
        { value: 563, name: '物理' },
        { value: 456, name: '化学' }
      ], [
        { value: 567, name: '语文' },
        { value: 765, name: '数学' },
        { value: 657, name: '英语' },
        { value: 456, name: '物理' },
        { value: 876, name: '化学' }
      ]],
      chartArr: []
    }
  },
  mounted () {
    this.data.forEach((item, index) => {
      const chart = echarts.init(this.$refs[`chart_${index}`][0])
      // 将实例保存到chartArr中,用于联动,如果不需要联动,这里就不需要了
      this.chartArr.push(chart)
      chart.setOption({
        tooltip: {
          trigger: 'item'
        },
        series: [
          {
            name: 'pie',
            type: 'pie',
            radius: ['40%', '70%'],
            avoidLabelOverlap: false,
            label: {
              show: true,
              position: 'inside'
            },
            data: item
          }
        ]
      })
    })
    // 图表实例实现联动
    echarts.connect(this.chartArr)
  }
}
</script>

<style lang="scss" scoped>
.chart-wrap {
  width: 1020px;
  margin: 0 auto;
  display: flex;
}
.chart {
  width: 33.3333%;
  height: 300px;
}
</style>
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Vue 3可以通过使用ref或reactive创建响应式数据实现动态渲染echarts图表。 首先,需要在项目中引入echarts库,可以通过npm安装echarts,然后在需要使用的组件中引入echarts: ``` import * as echarts from 'echarts'; ``` 然后,创建一个响应式对象来保存echarts的配置项和数据: ``` import { ref } from 'vue'; export default { setup() { const chartOptions = ref({ // echarts配置项 }); // 更新chartOptions数据 const updateChartOptions = () => { // 更新chartOptions的值 } return { chartOptions, updateChartOptions }; } } ``` 在模板中,可以通过v-if或v-show来控制echarts图表的显示与隐藏,将chartOptions作为echarts组件的props来动态渲染图表: ``` <template> <div> <div v-if="chartOptions"> <echarts :options="chartOptions"></echarts> </div> <button @click="updateChartOptions">更新图表</button> </div> </template> ``` 在按钮的点击事件中,可以通过调用updateChartOptions方法来更新chartOptions的值,从而实现动态渲染echarts图表: ``` import { reactive } from 'vue'; export default { setup() { const chartOptions = reactive({ // echarts配置项 }); // 更新chartOptions数据 const updateChartOptions = () => { // 更新chartOptions的值 } return { chartOptions, updateChartOptions }; } } ``` 以上是使用Vue 3进行echarts动态渲染的基本步骤,通过更新响应式对象的值,可以实现图表动态更新。具体的echarts配置项和数据处理逻辑可以根据实际需求进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZionHH

落魄前端,在线炒粉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值