当前位置:首页 > VUE

Vue实现多个echarts排版

2026-02-21 06:58:21VUE

Vue 中实现多个 ECharts 排版的方法

使用 Flex 布局或 Grid 布局

通过 CSS Flex 或 Grid 布局可以灵活控制多个 ECharts 实例的排列方式。Flex 适合一维排列(行或列),Grid 适合二维复杂布局。

<div class="charts-container">
  <div ref="chart1" class="chart-item"></div>
  <div ref="chart2" class="chart-item"></div>
</div>
/* Flex 横向排列 */
.charts-container {
  display: flex;
  gap: 20px; /* 图表间距 */
}
.chart-item {
  flex: 1; /* 等分宽度 */
  height: 400px;
}

/* Grid 网格排列 */
.charts-container {
  display: grid;
  grid-template-columns: repeat(2, 1fr); /* 两列 */
  gap: 20px;
}

动态响应式调整

通过监听窗口变化,动态调整 ECharts 实例的大小:

import { onMounted, onUnmounted } from 'vue';
import * as echarts from 'echarts';

export default {
  setup() {
    const charts = [];

    const initChart = (dom) => {
      const chart = echarts.init(dom);
      chart.setOption({ /* 配置项 */ });
      charts.push(chart);
      return chart;
    };

    const resizeCharts = () => {
      charts.forEach(chart => chart.resize());
    };

    onMounted(() => {
      window.addEventListener('resize', resizeCharts);
    });

    onUnmounted(() => {
      window.removeEventListener('resize', resizeCharts);
    });

    return { initChart };
  }
};

使用 ECharts 的 group 功能

如果需要联动(如鼠标悬停同步高亮),可以通过 group 属性将多个图表绑定到同一组:

const chart1 = echarts.init(document.getElementById('chart1'));
const chart2 = echarts.init(document.getElementById('chart2'));

chart1.setOption({
  group: 'shared', // 同一组名
  /* 其他配置 */
});
chart2.setOption({
  group: 'shared',
  /* 其他配置 */
});

封装可复用的图表组件

创建通用组件便于重复使用:

Vue实现多个echarts排版

<!-- EChartWrapper.vue -->
<template>
  <div ref="chartDom" :style="{ width, height }"></div>
</template>

<script>
import { ref, onMounted, onUnmounted } from 'vue';
import * as echarts from 'echarts';

export default {
  props: {
    option: Object,
    width: { type: String, default: '100%' },
    height: { type: String, default: '400px' },
    group: String
  },
  setup(props) {
    const chartDom = ref(null);
    let chartInstance = null;

    const initChart = () => {
      chartInstance = echarts.init(chartDom.value);
      chartInstance.setOption({
        ...props.option,
        group: props.group
      });
    };

    onMounted(initChart);
    onUnmounted(() => {
      if (chartInstance) chartInstance.dispose();
    });

    return { chartDom };
  }
};
</script>

注意事项

  • 确保容器有明确宽高,否则 ECharts 无法渲染。
  • 在组件销毁时调用 dispose() 释放资源。
  • 动态数据更新时需调用 setOption 并传递 notMerge: false 参数。

标签: 多个Vue
分享给朋友:

相关文章

Vue实现几行滚动

Vue实现几行滚动

Vue实现多行滚动效果 实现多行滚动效果可以通过CSS结合Vue的动态绑定完成。以下是几种常见实现方式: CSS动画实现 <template> <div class="scr…

Vue实现路由监

Vue实现路由监

Vue 实现路由监听的方法 在 Vue 中可以通过多种方式实现路由监听,以下是常见的几种方法: 使用 watch 监听 $route 对象 通过 Vue 的 watch 功能可以监听 $route…

Vue悬浮球怎么实现

Vue悬浮球怎么实现

Vue悬浮球实现方法 使用CSS定位和Vue事件绑定 创建一个Vue组件,利用CSS的position: fixed属性固定悬浮球位置,结合Vue的@click、@touchstart等事件实现交互…

Vue实现多个echarts排版

Vue实现多个echarts排版

实现多个 ECharts 实例的排版布局 在 Vue 中实现多个 ECharts 实例的排版布局,可以通过 CSS 布局结合 ECharts 的响应式设计来完成。以下是几种常见方法: 使用 Flex…

Vue实现前端埋点

Vue实现前端埋点

Vue 前端埋点实现方法 手动埋点 在需要埋点的位置直接调用埋点方法,适合精确控制埋点时机。 // 封装埋点方法 function trackEvent(eventName, data = {})…

Vue的实现原理 proxy

Vue的实现原理 proxy

Vue 3 的 Proxy 实现原理 Vue 3 使用 Proxy 替代 Vue 2 中的 Object.defineProperty 来实现响应式系统。Proxy 是 ES6 提供的原生对象,能够拦…