当前位置:首页 > VUE

Vue实现多个echarts排版

2026-02-21 06:58:21VUE

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

使用 Flex 布局或 Grid 布局

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

Vue实现多个echarts排版

<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 实例的大小:

Vue实现多个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',
  /* 其他配置 */
});

封装可复用的图表组件

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

<!-- 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 gitbook 实现

Vue gitbook 实现

Vue 与 GitBook 集成实现 将 Vue 集成到 GitBook 中可以通过插件或自定义构建流程实现,以下是具体方法: 使用 gitbook-plugin-vue 插件 安装插件到 GitB…

vue实现多个元素

vue实现多个元素

Vue 实现多个元素的方法 在 Vue 中实现多个元素的渲染或操作有多种方式,具体取决于需求场景。以下是常见的几种方法: 使用 v-for 渲染列表 通过 v-for 指令可以动态渲染多个元素,适用…

Vue实现词云图

Vue实现词云图

Vue 中实现词云图的方法 使用第三方库 vue-wordcloud vue-wordcloud 是一个专为 Vue 设计的轻量级词云组件,支持自定义颜色、大小和交互事件。 安装依赖: npm i…

Vue实现首次登录弹窗

Vue实现首次登录弹窗

Vue实现首次登录弹窗的方法 使用本地存储(localStorage)记录登录状态 在用户首次登录时,通过检查localStorage中是否存在特定标记来判断是否需要显示弹窗。如果标记不存在,则显示…

Vue实现列表选择变色

Vue实现列表选择变色

Vue实现列表选择变色 在Vue中实现列表选择变色可以通过多种方式完成,以下是几种常见的方法: 使用v-bind动态绑定class 通过v-bind:class动态绑定类名,根据当前选中项的状态切换…

Vue实现页签功能

Vue实现页签功能

Vue实现页签功能的方法 使用动态组件和v-for指令 在Vue中可以通过动态组件结合v-for实现页签功能。定义一个数组存储页签数据,使用v-for渲染页签标题,通过v-bind:is动态加载对应组…