Angular 中的 Echarts

发布: (2025年12月21日 GMT+8 13:48)
3 min read
原文: Dev.to

Source: Dev.to

ECharts 与 Angular 集成指南

嗨 👋 – 希望你今天过得棒棒的!

本文将讨论如何在 Angular 中使用 ECharts 并通过正确的导入实现有效的 tree‑shaking。你可以直接使用 ECharts 库,也可以使用 ngx-echarts 包装器。

何时直接使用 ECharts vs. 使用 ngx-echarts 包装器

直接使用 ECharts(无包装器)

优点

  • 完全掌控初始化和生命周期
  • 没有抽象层的额外开销
  • 可直接访问所有 ECharts API

缺点

  • 需要手动处理窗口尺寸变化
  • 需要编写更多模板代码
  • 需要自行处理内存清理

ngx-echarts 包装器

优点

  • 自动处理 Angular 生命周期
  • 内置 resize observer
  • 减少模板代码
  • 更好地融入 Angular 规范

缺点

  • 增加了抽象层
  • 对特定场景的控制力下降
  • 依赖包装器的更新

推荐: 对需要细粒度控制的自定义仪表盘使用直接的 ECharts;对普通应用则使用 ngx-echarts

正确的导入方式与 Tree‑Shaking

❌ 错误示例(引入全部)

import * as echarts from 'echarts';  // Bundle: ~700‑900 KB

这会无论你实际使用什么,都把整个 ECharts 库全部打包,导致体积巨大。

✅ 正确示例(可 Tree‑Shaking)

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

// 只注册你实际使用的部分
echarts.use([
  BarChart,
  LineChart,
  GridComponent,
  TooltipComponent,
  LegendComponent,
  TitleComponent,
  CanvasRenderer
]);

包体积对比

  • 之前(错误方式): ~900 KB
  • 之后(正确方式): ~80‑100 KB

节省比例: 91 % 🚀

为什么 echarts.use() 至关重要

echarts.use() 函数只会注册你需要的组件。若不使用它:

  • 包体积更大: 所有代码都会被打入 bundle
  • 加载速度慢: 用户需要下载不必要的代码
  • 优化受限: Tree‑shaking 无法有效工作

可以把它想象成:你只想借一本书,却去图书馆把整座图书馆都搬回家。

TypeScript 类型支持

若想在保持 tree‑shaking 的同时获得 IDE 对图表选项的自动补全:

import type { EChartsOption } from 'echarts/types';

const option: EChartsOption = {
  xAxis: {
    type: 'category',
    data: ['Mon', 'Tue', 'Wed']
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      data: [120, 200, 150],
      type: 'line'
    }
  ]
};

重要提示: 使用 import type(而不是普通的 import),这样类型会在编译时被剔除,不会进入最终的 bundle。

祝编码愉快! 🎉

Back to Blog

相关文章

阅读更多 »

Rust 把 'pub' 搞错了

!封面图片:Rust 把 “pub” 写错了 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s...