如何在vue3中封装并使用echarts组件

news2024/12/27 12:30:19

一. 安装echarts

npm install echarts --save

二. 按需加载创建一个echarts文件夹,并创建配置文件

//引入echarts
import * as echarts from 'echarts/core'

//引入柱状图,折线图
import { BarChart, LineChart } from 'echarts/charts'

// 引入提示框,标题,直角坐标系,数据集,内置数据转换器组件,组件后缀都为 Component
import {
    TitleComponent,
    TooltipComponent,
    GridComponent,
    DatasetComponent,
    TransformComponent
  } from 'echarts/components';
  
// 标签自动布局、全局过渡动画等特性
import { LabelLayout, UniversalTransition } from 'echarts/features';

// 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
import { CanvasRenderer } from 'echarts/renderers';

// 注册必须的组件
echarts.use([
    TitleComponent,
    TooltipComponent,
    GridComponent,
    DatasetComponent,
    TransformComponent,
    BarChart,
    LineChart,
    LabelLayout,
    UniversalTransition,
    CanvasRenderer
]);
export default echarts

三. 在main.ts中注册

import echarts from './echarts'

const app = createApp(App)
app.config.globalProperties.$echarts = echarts

四. 封装echarts组件

<template>
	<div ref="chart" class="chart" :style="style"></div>
</template>

<script setup lang="ts">
import { ref, reactive, watch, nextTick, getCurrentInstance } from 'vue'
// import * as echarts from 'echarts' // 全局引用,这么写的话之前配置的按需加载文件就没作用了

// 接收值
const props = defineProps({
	option: {
		type: Object,
		default: () => {}
	}
})

// 定义值
const chart = ref()
const style = reactive({
	width: '100%',
	height: '400px',
	background: '#f8f8f8',
	borderRadius: '8px'
})
const instance = getCurrentInstance()
const echarts = instance.appContext.config.globalProperties.$echarts

// 定义加载函数
const initCharts = () => {
	let myChart = echarts.init(chart.value)
	myChart.setOption(props.option)
	// 当窗口大小改变时候,echarts重置大小
	window.addEventListener('resize', () => {
		myChart.resize()
	})
}

// 监听当配置项发生变化的时候,调用加载函数
watch(
	() => props.option,
	val => {
		if (Object.keys(val)) {
			nextTick(() => {
				initCharts()
			})
		}
	},
	{ immediate: true }
)
</script>

<style lang="less" scoped></style>

五. 单独封装echarts图形配置项

import { reactive } from 'vue'

// 提取公共部分
const formatter = (params: any) => {
	let res = ''
	for (let i = 0; i < params.length; i++) {
		res += params[i].name + '<br />'
		res +=
			params[i].marker +
			params[i].seriesName +
			':' +
			`<span style="color: #000; padding-left: 10px; font-weight: 600">
		${params[i].seriesName == 'CPU(%)' ? params[i].value + '%' : params[i].value}</span>`
	}
	return res
}

// 鼠标悬浮在折线图上面的提示语
const tooltip = {
	trigger: 'axis',
	formatter
}

const grid = {
	left: '5%',
	right: '5%',
	containLabel: true
}

const yAxis = {
	type: 'value'
}

const echartData = reactive({
	optionList: [
		{
			option: {
				// 设置标题
				title: {
					text: 'CPU(%)',
					padding: 15
				},
				tooltip, // 设置鼠标悬浮在折线图上的样式
				grid, // 设置网格
				xAxis: {
					type: 'category',
					boundaryGap: false, // 设置刻度从零开始,默认是true表示刻度作为分割线
					data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] // 横坐标
				},
				yAxis, // 纵坐标
				series: [
					{
						name: 'CPU(%)',
						data: [15, 23, 24, 18, 35, 47, 60],
						type: 'line', // line是折线图,bar是直方图
						itemStyle: {
							color: '#4289fe' // 设置折线图小圆点颜色
						},
						areaStyle: {
							// 设置区域渐变色
							color: {
								type: 'linear', // 渐变色线性变化
								x: 0,
								y: 0,
								x2: 0,
								y2: 1,
								colorStops: [
									{ offset: 0, color: 'rgba(66, 137, 254, 1)' }, // 顶端颜色
									{ offset: 1, color: 'rgba(66, 137, 254, 0.11)' } // 低端颜色
								]
							}
						}
					}
				]
			},
			key: 'cpu'
		}
	]
})

export { echartData }

六. 使用组件

<template>
	<div>这是一个echarts演示页面</div>
	<el-row :gutter="20">
		<el-col v-for="item in state.value" :key="item.key">
			<dwchart :option="item.option" />
		</el-col>
	</el-row>
</template>

<script setup lang="ts">
import { reactive } from 'vue'
import dwchart from '../components/cmpts/DwEchart/index.vue'
import { echartData } from '../data/index'

const state = reactive<any>({ value: [] })

// 获取数据(实际情况由接口获取数据)
const getData = () => {
	state.value = echartData.optionList
}
getData()
</script>

<style lang="less" scoped></style>

七. 效果图

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

论文及代码详解——可变形卷积(DCNv1)

文章目录 论文详解Deformable ConvolutionDeformable RoI PoolingDeformable ConvNetsUnderstanding Deformable ConvNets 代码详解 论文&#xff1a;《Deformable Convolutional Networks》 论文详解 Deformable Convolution 普通卷积的数学表达 普通的二维卷积包括两个步骤:…

小知识积累

1、使用JSON.parse(JSON.stringify()) 深拷贝时会出现的问题 var obj {a: "zs",b: undefined,c: Symbol("score"),d: null,e: function () {console.log("show");},};console.log(JSON.parse(JSON.stringify(obj)));很明显undefined、函数、sym…

Netty+springboot开发即时通讯系统笔记(三)

实现长连接负载均衡策略 登录成功返回登陆的im地址。 1.在公共模块里写个RouteHandle接口&#xff0c;然后他的实现类去实现不同的均衡策略。 2.在业务模块的config文件下的beanConfig中定义一个Bean routeHandle&#xff0c;从配置文件中获取不同的负载均衡策略来初始化Rou…

苹果电脑会自动清理垃圾吗 苹果电脑系统垃圾怎么清除

苹果电脑是很多人喜欢使用的一种电脑&#xff0c;它有着优美的外观&#xff0c;流畅的操作系统&#xff0c;丰富的应用程序和高效的性能。但是&#xff0c;随着时间的推移&#xff0c;苹果电脑也会产生一些不必要的文件和数据&#xff0c;这些文件和数据就是我们常说的垃圾。那…

半导体退火那些事(2)

2.半导体退火的作用 2.1改善半导体的电学性能 退火过程中&#xff0c;材料中的缺陷得到修理&#xff0c;杂质原子和材料内的杙错得到排列&#xff0c;位于能带中动力学的载流子少&#xff0c;能级也就相对于更加密集。因而在退火之后&#xff0c;半导体材料中的电子、空穴浓度…

RabiitMq-4工作队列/消息应答

1.工作队列 工作机制类似一个生产者&#xff0c;多个消费者。工作队列采用轮训的机制&#xff0c;即工作线程一次只能处理一个消息&#xff0c;轮流处理 公共方法 public class MqUtiles {public static final String QUEUE_NAME"hello";public static Channel fu…

预防SQL漏洞注入和规避网络攻击

前言: 虽然近些年SQL注入已经被各类的安全开发框架规避了绝大部分&#xff0c;但SQL注入作为一种最原始的攻击手段之一&#xff0c;破坏力仍然十分强大&#xff0c;因为它直捣黄龙数据中心。所以未雨绸缪&#xff0c;各位不可不重视。 预防SQL注入方法措施&#xff1a; 服务器…

【微信小程序】阶段开发总结2

【微信小程序】阶段开发总结2 《工欲善其事&#xff0c;必先利其器》 一、选择器组件Picker 由于业务需求&#xff0c;需要比较个性化的时间Picker组件和基础Picker组件&#xff0c;便基于微信提供的 picker-view 自行封装了两个Picker组件。 基础Picker&#xff1a; 代码示…

低代码平台这5大选型要素值得参考

伴随低代码的流行&#xff0c;选购低代码成为越来越多人需要面临的挑战。选平台容易&#xff0c;换平台难。不同的企业场景不同&#xff0c;对低代码平台的需求也不一样。因此在做出技术选型时&#xff0c;有五个关键要素需要考虑。 要点1&#xff1a;是否符合自身需求 这是最核…

[JavaWeb]【四】web后端开发-SpringBootWeb入门

目录 一 Spring 二 SpringBootWeb入门 2.1 入门需求 2.2 分析 2.3 开始创建SpringBootWeb 2.4 创建类实现需求 2.5 启动程序 2.6 访问 三 HTTP协议 3.1 HTTP-概述 3.2 HTTP-请求协议 3.3 HTTP-响应协议 3.3.1 响应状态码 && 响应类型 3.4 HTTP-协议解析 前言…

【一】ubuntu20.04上搭建containerd版( 1.2.4 以上)k8s及kuboard V3

k8s 部署全程在超级用户下进行 sudo su本文请根据大纲顺序阅读&#xff01; 一、配置基础环境&#xff08;在全部节点执行&#xff09; 1、安装docker 使用apt安装containerd 新版k8s已经弃用docker转为containerd&#xff0c;如果要将docker改为containerd详见&#xff1a…

6、Mysql免安装版本的配置与使用(2023-08)

1、下载 官网&#xff1a;https://www.mysql.com/downloads/ 点击前往 1.1 官网首页 1.2 首页往下翻&#xff0c;到达下图点击 1.3 选择如图Mysql Cimmunity Server 1.4 选择版本 1.5 点击开始下载 2、安装 2.1 配置环境变量 打开电脑环境变量&#xff0c;在环境变量path中…

抖音矩阵系统源代码部署开发详解

一、引言 抖音矩阵系统是一款基于抖音平台的自动化短视频创作和发布工具。通过对源代码的部署和开发&#xff0c;可以实现大规模、高效率的短视频生产和发布&#xff0c;提高抖音账号的曝光量和关注度。本文将详细介绍抖音矩阵系统源代码的部署和开发过程&#xff0c;帮助读者…

centos安装pandoc

1、首先从官网下载安装包(Release pandoc 3.1.6 jgm/pandoc GitHub) 2、上传到服务器(这里放到 /root目录下了)&#xff0c;进行解压 tar -zxvf pandoc-3.1.6-linux-amd64.tar.gz&#xff0c;解压后的文件 3、然后使用命令 ln -s /root/pandoc-3.1.6/bin/pandoc /usr/bin/p…

JavaScript 进阶 第四天

深浅拷贝异常处理处理this性能优化 一. 深浅拷贝 深浅拷贝只针对引用类型 1.1 浅拷贝 拷贝的是地址常见方法 &#xff08;1&#xff09;拷贝对象&#xff1a;Object.assign() / 展开运算符 {...obj} &#xff08;2&#xff09;拷贝数组&#xff1a;Array.prototype.c…

蓝桥杯每日N题(杨辉三角形)

大家好 我是寸铁 希望这篇题解对你有用&#xff0c;麻烦动动手指点个赞或关注&#xff0c;感谢您的关注 不清楚蓝桥杯考什么的点点下方&#x1f447; 考点秘籍 想背纯享模版的伙伴们点点下方&#x1f447; 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…

Hbase的列式存储到底是什么意思?一篇文章让你彻底明白

一、 HBase 定义 Apache HBase™ 是以 hdfs 为数据存储的&#xff0c;一种分布式、可扩展的 NoSQL 数据库。 二、 HBase 数据模型 HBase 的设计理念依据 Google 的 BigTable 论文&#xff0c;论文中对于数据模型的首句介绍。 Bigtable 是一个稀疏的、分布式的、持久的多维排…

性能优化的重要性

性能优化的重要性 性能优化的重要性摘要引言注意事项代码示例及注释性能优化的重要性 性能优化的重要性在 Java 中的体现响应速度资源利用效率扩展性与可维护性并发性能合理的锁策略线程安全的数据结构并发工具类的应用避免竞态条件和死锁 总结代码示例 博主 默语带您 Go to Ne…

【Java】常用工具——字符串

1. String的创建 String s1 "Katnisss Blog"; String s2 new String(); //空的字符串 String s3 new String("Katnisss Blog");2. String的常用方法 方法解释int length()返回字符串长度int indexOf(char c)返回字符c出现的第一个位置int indexOf(Str…

十、RabbitMQ集群

一、clustering 1、 使用集群的原因 单台RabbitMQ遇到内存崩溃、机器故障等情况会导致服务不可用单台RabbitMQ只能满足每秒1000条的消息吞吐量 2、搭建步骤 1、准备三台虚拟机 2、修改3台机器的主机名称 分别为node1、node2、node3 vi /etc/hostname 3、配置节点的hosts文…