官网提供的按需引入方法为全量按需引入,在打包分离中,仍旧存在使用不到的图表被打包进去。

例如:组件A使用了折线图、柱状图,组件B只用到了折线图,但是打包组件B的时候,柱状图也就被打包进去。

本文提供一种动态按需引入的思路,使得只用到折线图的组件B,打包的时候只打包折线图,不会将组件A用到的柱状图也打包进去。

目录结构:

Index.ts 如下:

// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
import * as ECHARTS from "echarts/core";
import type { ComposeOption } from "echarts/core";
import CORE, { CORE_ECOption } from "./Core";
import { LineChart_ECOption } from "./LineChart";
import { BarChart_ECOption } from "./BarChart";
import { RadarChart_ECOption } from "./RadarChart"; // 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型
export type ECOption = ComposeOption<CORE_ECOption | LineChart_ECOption | BarChart_ECOption | RadarChart_ECOption>; class Echarts {
public echarts: any;
constructor(type: string[], callback: any) {
// 注册必须的组件
ECHARTS.use([...CORE]); const charts: any = []; type!.map((item: any) => {
const res: any = import(/* webpackChunkName: "echarts" */ `./${item}`);
charts.push(res);
}); Promise.all(charts).then((res: any) => {
res.map((item: any) => {
ECHARTS.use(item.default);
});
callback(ECHARTS);
});
}
} export default Echarts;

Core.ts 如下:

// 引入标题,提示框,直角坐标系,数据集,内置数据转换器组件,组件后缀都为 Component
import {
TitleComponent,
TooltipComponent,
GridComponent,
DatasetComponent,
TransformComponent,
ToolboxComponent,
LegendComponent
} from "echarts/components"; // 标签自动布局、全局过渡动画等特性
import { LabelLayout, UniversalTransition } from "echarts/features"; // 组件类型的定义后缀都为 ComponentOption
import type {
TitleComponentOption,
TooltipComponentOption,
GridComponentOption,
DatasetComponentOption,
ToolboxComponentOption,
LegendComponentOption
} from "echarts/components"; // 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
import { CanvasRenderer } from "echarts/renderers"; // 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型
export type CORE_ECOption =
| TitleComponentOption
| TooltipComponentOption
| GridComponentOption
| DatasetComponentOption
| ToolboxComponentOption
| LegendComponentOption; const CORE = [
TitleComponent,
TooltipComponent,
GridComponent,
DatasetComponent,
TransformComponent,
ToolboxComponent,
LegendComponent,
LabelLayout,
UniversalTransition,
CanvasRenderer
]; export default CORE;
 

BarChart.ts 如下:

import { BarChart } from "echarts/charts";

// 系列类型的定义后缀都为 SeriesOption
import type { BarSeriesOption } from "echarts/charts"; export type BarChart_ECOption = BarSeriesOption; export default BarChart;

LineChart.ts 如下:

import { LineChart } from "echarts/charts";

// 系列类型的定义后缀都为 SeriesOption
import type { LineSeriesOption } from "echarts/charts"; // 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型
export type LineChart_ECOption = LineSeriesOption; export default LineChart;
 

RadarChart.ts 如下:

import { RadarChart } from "echarts/charts";

// 系列类型的定义后缀都为 SeriesOption
import type { RadarSeriesOption } from "echarts/charts"; // 组件类型的定义后缀都为 ComponentOption
import type { RadarComponentOption } from "echarts/components"; // 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型
export type RadarChart_ECOption = RadarComponentOption | RadarSeriesOption; export default RadarChart;
 

如果项目中还用到其他图表类型,则按照具体需要引入即可。

可以根据具体业务进行调用封装,下面是封装的示例 util.ts:

import Echarts from "/echarts/Index";

export const renderEcharts = async (type: string[], dom: string, option: any = {}, callback?: any) => {
if (!dom) return; new Echarts(type, (echart: any) => {
const _dom: any = document.querySelector(dom); const echarts_instance = echart.init(_dom); echarts_instance.setOption(option); window.addEventListener("resize", function () {
echarts_instance.resize();
echarts_instance.clear();
echarts_instance.setOption(option);
}); _dom?.addEventListener("touchend", () => {
setTimeout(() => {
echarts_instance.dispatchAction({
type: "hideTip"
});
echarts_instance.dispatchAction({
type: "updateAxisPointer"
});
}, 1000);
}); callback && callback(echarts_instance);
});
};

具体调用:

let echarts_instance = null;
const options = {// 具体的option }
renderEcharts(["LineChart", "BarChart"], "#short_sale_count",options, (instance) => {
echarts_instance = instance;
});

Echarts 5 动态按需引入图表的更多相关文章

  1. vue项目使用echarts按需引入实现地图动态显示效果时,报错:TypeError: Cannot read property 'dataToPoint' of undefined

    vue项目使用echarts按需引入实现地图动态显示效果时,报错:TypeError: Cannot read property 'dataToPoint' of undefined 借鉴了该大神的文 ...

  2. 使用Echarts实现动态曲线图表

    最近做的一个在线气象观测网站要实现一个需求:使用图表展示最近五天温湿度等气象要素的曲线变化 具体效果参考:http://www.weatherobserve.com/showInfoIndex.jsp ...

  3. vue引入echarts、找不到的图表引入方法、图表中的点击事件

    1.在vue-cli项目中添加webpack配置,本文引入的最新版本.在 3.1.1 版本之前 ECharts 在 npm 上的 package 是非官方维护的,从 3.1.1 开始由官方 EFE 维 ...

  4. vue按需引入/全局引入echarts

    npm install echarts -S 1.按需引入 新建echarts.js公共引入 // 文件路径 @/lib/echarts.js 自行配置 // 加载echarts,注意引入文件的路径 ...

  5. vue按需引入echarts

    下载安装echarts包:npm install echarts -D 一.全局引入 main.js中配置 import echarts from 'echarts' //引入echarts Vue. ...

  6. mpvue中按需引入echarts

    大家都知道小程序文件大小不能超过2M, 在项目中引入echarts后,文件大小远远超出2M了.因为echarts文件默认是包含所有图表代码的,所以文件体积会比较大.解决办法如下: 安装 首先我们先安装 ...

  7. ECharts(Enterprise Charts 商业产品图表库)初识

    一.简介 大数据时代,重新定义图表的时候到了,所以随之ECharts就随之出现了. ECharts(Enterprise Charts 商业产品图表库) 是基于Canvas的,纯Javascript ...

  8. ECharts学习(1)--简单图表的绘制

    1.获取ECharts 官网 下载:http://echarts.baidu.com/download.html 2.在html页面中引入ECharts文件 <!DOCTYPE html> ...

  9. ECharts一个强大的商业产品图表库

    Architecture ECharts (Enterprise Charts 商业产品图表库) 提供商业产品常用图表库,底层基于ZRender,创建了坐标系,图例,提示,工具箱等基础组件,并在此上构 ...

  10. import 和组件库按需引入

    概述 今天查资料查到了一些有趣的东西,记录下来,供以后开发时参考,相信对其他人也有用. 参考资料: import.require.export.module.exports 混合使用详解 从 impo ...

随机推荐

  1. Java面试知识点(四)重写和重载

    重写override 在 java 中有很多的继承,继承下来的有变量.方法.在有一些子类要实现的方法中,方法名.传的参数.返回值跟父类中的方法一样,但具体实现又跟父类的不一样,这时候我们就需要重写父类 ...

  2. Vue3 中的 v-bind 指令:你不知道的那些工作原理

    前言 v-bind指令想必大家都不陌生,并且都知道他支持各种写法,比如<div v-bind:title="title">.<div :title="t ...

  3. .NET 高效灵活的API速率限制解决方案

    前言 FireflySoft.RateLimit是基于.NET Core和.NET Standard构建,支持多种速率限制算法和策略,包括固定窗口.滑动窗口.漏桶.令牌桶等.通过简单的配置和集成,开发 ...

  4. 集成学习与随机森林(四)Boosting与Stacking

    Boosting Boosting(原先称为hypothesis boosting),指的是能够将多个弱学习器结合在一起的任何集成方法.对于大部分boosting方法来说,它们常规的做法是:按顺序训练 ...

  5. FFmpeg变速处理视频文件

    使用工具:小丸工具箱,HandBrake,FFmpeg 首先确定视频是否为VFR(可变帧率),如果是VFR需要在二次处理前转换成CFR(固定帧率) VFR转换CFR可以使用FFmpeg命令行或Hand ...

  6. hive第二课:Hive3.1.2概述与基本操作(修改版)

    Hive3.1.2概述与基本操作 1.Hive基本概念 1.1 Hive简介 Hive本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据存储,说白了hive可以理解为一个将 ...

  7. React中的Ref

    React中ref是一个对象,它有一个current属性,可以对这个属性进行操作,用于获取DOM元素和保存变化的值.什么是保存变化的值?就是在组件中,你想保存与组件渲染无关的值,就是JSX中用不到的或 ...

  8. c语言之位段

    百度百科链接 示例: 1 struct CHAR 2 { 3 unsigned int ch : 8; //8位 4 unsigned int font : 6; //6位 5 unsigned in ...

  9. Centos7搭建Minio环境(配置开机自启)

    Minio 添加环境变量 # 设置控制台账号 最少3位 export MINIO_ACCESS_KEY=admin # 设置密码 最少8位 export MINIO_SECRET_KEY=123456 ...

  10. Python数据分析方法与技巧

    背景介绍 数据分析是数据科学领域的核心技能之一,它涉及到数据的收集.清洗.处理.分析和可视化. 数据分析是指通过收集.清洗.处理.分析和可视化数据来发现隐藏的模式.趋势和关系的过程. 数据分析是数据科 ...