当前位置:首页 > VUE

vue实现echarts项目

2026-01-17 01:30:13VUE

vue3 中集成 ECharts

安装 ECharts 依赖包

npm install echarts --save

在组件中引入并初始化

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

const chartRef = ref(null);

onMounted(() => {
  const myChart = echarts.init(chartRef.value);
  myChart.setOption({
    title: { text: 'Vue3 ECharts 示例' },
    tooltip: {},
    xAxis: { data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子'] },
    yAxis: {},
    series: [{ name: '销量', type: 'bar', data: [5, 20, 36, 10, 10, 20] }]
  });
});

模板部分

<div ref="chartRef" style="width: 600px; height: 400px;"></div>

响应式处理

监听窗口变化自动调整

import { onUnmounted } from 'vue';

const resizeHandler = () => myChart.resize();
window.addEventListener('resize', resizeHandler);

onUnmounted(() => {
  window.removeEventListener('resize', resizeHandler);
  myChart.dispose();
});

封装可复用组件

创建 EChartsWrapper.vue

vue实现echarts项目

<template>
  <div ref="chartEl" :style="{ width, height }"></div>
</template>

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

const props = defineProps({
  option: Object,
  width: { type: String, default: '100%' },
  height: { type: String, default: '400px' }
});

const chartEl = ref(null);
let chartInstance = null;

const initChart = () => {
  chartInstance = echarts.init(chartEl.value);
  chartInstance.setOption(props.option);
};

onMounted(initChart);
onUnmounted(() => chartInstance?.dispose());

watch(() => props.option, (newVal) => {
  chartInstance?.setOption(newVal);
}, { deep: true });
</script>

主题定制

使用官方主题

import * as echarts from 'echarts';
import 'echarts/theme/dark'; // 引入暗黑主题

const myChart = echarts.init(chartRef.value, 'dark');

自定义主题

  1. 在主题编辑器中设计:https://echarts.apache.org/theme-builder.html
  2. 下载主题文件并导入
    import theme from './customTheme.json';
    echarts.registerTheme('myTheme', theme);
    const myChart = echarts.init(chartRef.value, 'myTheme');

常见图表类型实现

折线图配置示例

vue实现echarts项目

{
  xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] },
  yAxis: { type: 'value' },
  series: [{ data: [820, 932, 901, 934, 1290, 1330, 1320], type: 'line' }]
}

饼图配置示例

{
  series: [{
    type: 'pie',
    data: [
      { value: 1048, name: 'Search Engine' },
      { value: 735, name: 'Direct' },
      { value: 580, name: 'Email' }
    ]
  }]
}

性能优化建议

大数据量使用增量渲染

series: [{
  type: 'line',
  progressive: 1000, // 增量渲染阈值
  progressiveThreshold: 1000
}]

按需引入模块

import * as echarts from 'echarts/core';
import { BarChart, LineChart } from 'echarts/charts';
import { TitleComponent, TooltipComponent } from 'echarts/components';
import { CanvasRenderer } from 'echarts/renderers';

echarts.use([BarChart, LineChart, TitleComponent, TooltipComponent, CanvasRenderer]);

标签: 项目vue
分享给朋友:

相关文章

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单的常见方法 基于路由配置生成菜单 Vue Router 的路由配置可以天然转化为菜单结构,适合权限与路由绑定的系统: // router/index.js const route…

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件: Vu…

vue实现收起展开面板

vue实现收起展开面板

实现收起展开面板的方法 在Vue中实现收起展开面板功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-show或v-if控制显示隐藏 利用Vue的指令可以轻松实现面板的展开和收起:…

vue中如何实现循环

vue中如何实现循环

在 Vue 中实现循环 Vue 提供了 v-for 指令用于实现循环渲染列表数据。v-for 可以遍历数组、对象或数字范围,生成动态的 DOM 元素。 遍历数组 使用 v-for 遍历数组时,语法为…

vue实现文章锚点定位

vue实现文章锚点定位

实现文章锚点定位的方法 在Vue中实现文章锚点定位可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML锚点 通过HTML的id属性和<a>标签的href属性实现锚点跳转。在Vu…

vue实现边框

vue实现边框

Vue 实现边框的方法 在 Vue 中实现边框效果可以通过多种方式完成,包括内联样式、CSS 类绑定、动态样式以及使用第三方 UI 库。以下是几种常见的实现方法。 内联样式绑定 使用 Vue 的…