当前位置:首页 > 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组件创建遮罩层 创建一个遮罩层组件,通过全局注册或动态挂载的方式实现全局调用。以下是一个简单…

vue无限菜单怎么实现

vue无限菜单怎么实现

实现 Vue 无限菜单的方法 递归组件实现嵌套菜单 使用 Vue 的递归组件特性可以轻松实现无限级嵌套菜单。通过组件调用自身的方式处理嵌套数据。 <template> <ul&…

vue实现过程

vue实现过程

Vue 的实现过程 Vue 的实现过程可以分为多个核心模块,包括响应式系统、虚拟 DOM、模板编译等。以下是 Vue 的主要实现过程分析。 响应式系统 Vue 的响应式系统基于 Object.de…

vue 实现级联

vue 实现级联

Vue 实现级联选择器 级联选择器(Cascader)常用于省市区选择、分类选择等场景。Vue 中可以通过 Element UI、Ant Design Vue 等 UI 库实现,也可以手动封装。 使…

vue权限实现

vue权限实现

Vue 权限实现方案 基于路由的权限控制 通过路由守卫实现权限验证,在路由配置中添加meta字段标记权限要求。在router.beforeEach中检查用户权限与路由要求的匹配情况。 // rout…

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…