vue3+Ts项目按需引入Echarts,并封装成hooks

记录 vue3+Ts 项目中,按需引入echarts并进行二次封装使用。

1、安装:npm i echarts

在这里插入图片描述

2、新增按需引入配置文件:echartsConfig.ts

// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
import * as echarts from "echarts/core";// 引入内置组件,组件后缀都为Component
import {TitleComponent,TooltipComponent,GridComponent,PolarComponent,AriaComponent,ParallelComponent,LegendComponent,RadarComponent,ToolboxComponent,DatasetComponent, // 数据集组件DataZoomComponent,VisualMapComponent,TimelineComponent,CalendarComponent,GraphicComponent,TransformComponent, // 数据转换器组件(filter, sort)
} from "echarts/components";// 引入渲染器:echarst默认使用canvas渲染,引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
import { CanvasRenderer, SVGRenderer } from "echarts/renderers";// 标签自动布局、全局过渡动画等特性
import { LabelLayout, UniversalTransition } from "echarts/features";// 引入图表类型,后缀都为Chart
import {BarChart,LineChart,PieChart,MapChart,RadarChart,PictorialBarChart,
} from "echarts/charts";// 注册必须的组件
echarts.use([// 内置组件TitleComponent,TooltipComponent,GridComponent,PolarComponent,AriaComponent,ParallelComponent,LegendComponent,RadarComponent,ToolboxComponent,DatasetComponent,DataZoomComponent,VisualMapComponent,TimelineComponent,CalendarComponent,GraphicComponent,TransformComponent,// 渲染器CanvasRenderer,SVGRenderer,// 特性LabelLayout,UniversalTransition,// 图表BarChart,LineChart,PieChart,MapChart,RadarChart,PictorialBarChart,
]);export default echarts;

3、封装成hooks:useEcharts.ts

import {Ref,shallowRef,unref,onMounted,onDeactivated,onBeforeUnmount,
} from "vue";import echarts from "@/components/baseEcharts/config";export type EChartsCoreOption = echarts.EChartsCoreOption;const useEcharts = (elRef: Ref<HTMLDivElement>, options: EChartsCoreOption) => {const charts = shallowRef<echarts.ECharts>();const setOptions = (options: EChartsCoreOption) => {charts.value && charts.value.setOption(options);};// 初始化const initCharts = (themeColor?: Array<string>) => {const el = unref(elRef);if (!el || !unref(el)) {return;}charts.value = echarts.init(el);if (themeColor) {options.color = themeColor;}setOptions(options);};// 重新窗口变化时,重新计算const resize = () => {charts.value && charts.value.resize();};onMounted(() => {window.addEventListener("resize", resize);});// 页面keepAlive时,不监听页面onDeactivated(() => {window.removeEventListener("resize", resize);});onBeforeUnmount(() => {window.removeEventListener("resize", resize);});return {initCharts,setOptions,resize,};
};export { useEcharts };

4、封装成基础组件:baseEcharts.vue

<template><div:style="{width: width,height: height,}"ref="echartsRef"/>
</template><script setup lang="ts">
import { ref, onMounted, watch, PropType } from "vue";
import { useEcharts, EChartsCoreOption } from "./useEchart.ts"; // 引入hooksconst props = defineProps({options: { type: Object as PropType<EChartsCoreOption>, required: true },height: { type: String, default: "100%" },width: { type: String, default: "100%" },themeColors: { type: Array as PropType<string[]>, default: () => [] },
});const echartsRef = ref();const { setOptions, initCharts } = useEcharts(echartsRef, props.options);watch(() => props.options,(nVal) => {let targetOptions: EChartsCoreOption = {};if (props.themeColors && props.themeColors.length > 0) {targetOptions = { ...nVal };targetOptions.color = props.themeColors;} else {targetOptions = { ...nVal };}setOptions(targetOptions);}
);onMounted(() => {initCharts();
});
</script>

5、使用示例:useExample.vue

<template><BaseEcharts :options="options" height="300px" />
</template><script lang="ts" setup>
import BaseEcharts from "@/components/baseEcharts/index.vue";const options = {title: {text: "使用示例",subtext: "二级标题",subTextStyle: {fontSize: 16,fontWeight: "normal",left: "center",y: "center",},},tooltip: {trigger: "axis",axisPointer: {lineStyle: {width: 1,color: "#008000",},},},grid: {left: "1%",right: "1%",bottom: "1%",top: "60px",containLabel: true,},xAxis: {type: "category",data: ["1月", "2月", "3月", "4月", "5月", "6月", "7月"],axisLabel: {interval: 0,rotate: 30,},},yAxis: {axisLabel: {formatter: (val: number) => {return val;},},},series: [{name: "收入",type: "bar",stack: "Total",data: [200, 301, 402, 503, 604, 705, 806],},{name: "支出",type: "line",stack: "Total",data: [100, 210, 1020, 230, 20, 250, 60],},],
};
</script>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.Windows下安装MongoDB和Compass教程

Windows下安装MongoDB 总体体验下来&#xff0c;&#xff0c;要比MySQL的安装简单了许多&#xff0c;没有过多的配置&#xff0c;直接就上手了&#xff01; 1、下载 进入官方的下载页面https://www.mongodb.com/try/download/community&#xff0c;如下选择&#xff0c;我选…

第七节:使用SMB发布Web前端程序

一、概述 一直以来&#xff0c;多数人都使用Apache、IIS、Tomcat等开源或商业Web服务器来运行Web程序&#xff0c;各种参数太多&#xff0c;与我们简单易用逻辑相左。所以在架构设计的时候&#xff0c;我们也在考虑&#xff0c;我们公司的Web程序是否能运行在SMB中&#xff0c;…

52 硬中断的实现

前言 呵呵 中断机制 也是内核中很常见的机制了 中断机制是现代计算机系统中的基本机制之一&#xff0c;它在系统中起着通信网络的作用&#xff0c;以协调系统对各种外部事件的响应和处理&#xff0c;中断是实现多道程序设计的必要条件&#xff0c;中断是CPU 对系统发生的某个…

idea Springboot 在线考试管理系统开发mysql数据库web结构java编程计算机网页

一、源码特点 springboot 在线考试管理系统是一套完善的完整信息系统&#xff0c;结合mvc框架和bootstrap完成本系统springboot spring mybatis &#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有…

关于-机器人学导论

机器人学导论&#xff0c;经典的基础教材&#xff0c;原书叫introduction to robotics mechanics and control &#xff0c;在网上看到这个下载&#xff0c;这个好像不像有些书已经免费了&#xff0c;但是太经典拿它当教材的很多&#xff0c;最好看清晰的纸质版&#xff0c;特别…

java-ssm-jsp基于java的信访管理系统的设计与实现

java-ssm-jsp基于java的信访管理系统的设计与实现 获取源码——》公主号&#xff1a;计算机专业毕设大全 获取源码——》公主号&#xff1a;计算机专业毕设大全

Gitlab CI/CD 自动化打包部署前端(vue)项目

一、虚拟机安装 1.vmware下载 2.镜像下载 3.Ubuntu 4.新建虚拟机 一直点下一步&#xff0c;直到点击完成。 5.分配镜像 二、Gitlab CI/CD 自动化部署项目 1.配置GitLab CI/CD&#xff1a; A.在你的Vue.js项目中&#xff0c;创建一个名为.gitlab-ci.yml的文件&#xff0…

windbg调试协议wireshark抓包解析插件

把目录下文件复制到如下位置,Wireshark支持版本4.0以上 C:\Program Files\Wireshark\plugins\4.0\kdnet.lua C:\Program Files\Wireshark\gcrypt.dll C:\Program Files\Wireshark\luagcrypt.dll 启动 “C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbg.exe” -k …

使用vscode——配置vue3用户代码片段

一、 设置/配置用户代码片段 二、点击新建全局代码片段文件输入vue.json 三、配置代码片段、 {"Print to console": {"prefix": "vue3","body": ["<template>"," <div></div>","</te…

express+mysql+vue,从零搭建一个商城管理系统14--快递查询(对接快递鸟)

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、安装md5&#xff0c;axios&#xff0c;qs二、新建config/logistics.js三、修改routes/order.js四、添加商品到购物车总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写service部分 快递鸟…

Linux进程补充

进程 一、进程创建 1.fork fork() //Linux创建子进程的系统调用&#xff0c;允许创建多个子进程&#xff0c;使用循环创建多个子进程&#xff1b; //需要注意的是&#xff0c;创建出来的进程与父进程在调度是由调度器决定的&#xff0c;并没有严格的先后顺序&#xff1b;二、…

组建对等网

一、概念 对等网络&#xff08;Peer-to-Peer, P2P&#xff09;是一种分布式网络架构&#xff0c;其中每个参与节点&#xff08;称为"对等体"或"节点"&#xff09;既可以作为客户端也可以作为服务器&#xff0c;直接与网络中的其他节点分享资源&#xff08…

基于Python django的人脸识别门禁系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、Python技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&…

Chrome的V8引擎 和操作系统交互介绍

Chrome的V8引擎是一个用C编写的开源JavaScript和WebAssembly引擎&#xff0c;它被用于Chrome浏览器中&#xff0c;以解释和执行JavaScript代码。V8引擎将JavaScript代码转换为机器代码&#xff0c;这使得JavaScript能够以接近本地代码的速度运行。 V8引擎与操作系统的交互主要体…

亚马逊国际获得AMAZON商品详情 API 返回值说明

亚马逊国际的商品详情API返回值通常包含了关于商品的详细信息&#xff0c;这些信息对于开发者来说是非常有价值的&#xff0c;因为它们可以用于构建电商应用、展示商品信息、比价购物等场景。 item_get-获得AMAZON商品详情调用链接获取 amazon.item_get 公共参数 下面是一个简…

Adobe PDF背景设置护眼模式,缓解眼部疲劳

一、背景 在用Adobe PDF看论文时&#xff0c;默认的白色背景看久了&#xff0c;眼睛会特别疲劳&#xff0c;下面介绍如何设置背景为护眼模式。 二、设置PDF为护眼模式 使用Adobe Acrobat Pro DC打开任意PDF文件&#xff0c;在上方工具栏选择“编辑”&#xff0c;在下拉菜单栏…

浏览器同源策略及跨域问题

同源策略&#xff1a;同源策略是一个重要的安全策略&#xff0c;它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档&#xff0c;减少可能被攻击的媒介。 同源策略的作用&#xff1a;保护浏览器中网站的安全&#xff0c;限制ajax只…

第五节:使用SMB开发WebSocket通信

一、概述 本节主要讲解在SMB中如何进行websocket快速开发&#xff0c;实现客户端连接、关闭、消息通讯等功能。 示例下载&#xff1a;https://download.csdn.net/download/lllllllllluoyi/88949743 二、创建WebSocket服务器 1、在csdnProject工程中新建一个消息流。 添加W…

pytorch升级打怪(三)

数据集合数据加载器 简介加载数据集迭代和可视化数据集为您的文件创建自定义数据集__init____len____getitem__ 准备您的数据以使用DataLoaders进行训练通过DataLoader进行遍载 简介 处理数据样本的代码可能会变得混乱且难以维护&#xff1b;理想情况下&#xff0c;我们希望我…

N7977A 先进电源系统:动态直流电源,160 V,12.5 A,2000 W

N7977A 先进电源系统&#xff1a;动态直流电源 160 V&#xff0c;12.5 A&#xff0c;2000 W Keysight N7977A 专为需要高速动态电源和测量功能的自动化测试设备&#xff08;ATE&#xff09;应用而设计。 简述 支持 BenchVue 软件。 无需编程&#xff0c;即可结合使用您的计…