vue3封装echarts,传入配置即可使用,支持适配

news/2024/11/25 3:42:39/
代码
javascript"><template><divref="chartRef"class="chart-container":style="{ width: Props.width, height: Props.height }"><!-- 当加载状态为 true 且图表尚未初始化时,显示 Loading 文本 --><div v-if="loading && !chartInstance.value" class="loading">Loading...</div></div>
</template><script setup>
import {ref,watch,onMounted,onUnmounted,defineProps,nextTick,markRaw,
} from "vue";
import * as echarts from "echarts";// 定义组件的 Props
let Props = defineProps({// 图表的配置选项option: {type: Object,default: () => {return {xAxis: {type: "category",data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],},yAxis: {type: "value",},series: [{data: [150, 230, 224, 218, 135, 147, 260],type: "line",},],};},},// 图表的宽度width: { type: String, default: "100%" },// 图表的高度height: { type: String, default: "100%" },
});// 引用 DOM 容器
const chartRef = ref(null);
// 保存 ECharts 图表实例
const chartInstance = ref(null);// 初始化图表
const initChart = async () => {// 如果 chartRef 不存在或图表已经初始化,直接返回if (!chartRef.value || chartInstance.value) return;// 获取 DOM 容器的宽高const { offsetWidth, offsetHeight } = chartRef.value;if (offsetWidth === 0 || offsetHeight === 0) {console.warn("chartRef.offsetWidth 或 chartRef.offsetHeight 为 0,等待 100ms 后重试");setTimeout(initChart, 100); // 等待 100ms 后重新尝试初始化return;}await nextTick(); // 确保 DOM 渲染完成chartInstance.value = markRaw(echarts.init(chartRef.value)); // 初始化 ECharts 图表实例// 如果有配置选项,设置图表if (Props.option) {chartInstance.value.setOption(Props.option);}
};// 监听 Props.option 的变化,并更新图表
watch(() => Props.option,(newOption) => {if (newOption && chartInstance.value) {chartInstance.value.setOption(newOption); // 更新图表配置}},{ deep: true } // 深度监听对象内部的变化
);// 处理窗口大小变化,重新调整图表大小
const handleResize = () => {chartInstance.value?.resize(); // 调整图表大小chartInstance.value.setOption(Props.option); // 更新图表配置,确保展示正常
};let observer; // 定义 ResizeObserver 实例
onMounted(() => {initChart(); // 组件挂载时初始化图表observer = new ResizeObserver(() => {handleResize(); // 当容器大小变化时调整图表});observer.observe(chartRef.value); // 监听 chartRef 的尺寸变化
});onUnmounted(() => {observer?.disconnect(); // 解除 ResizeObserver 的监听chartInstance.value?.dispose(); // 销毁图表实例
});
</script><style scoped>
/* 容器样式 */
.chart-container {position: relative;width: 100%;height: 400px;min-height: 200px; /* 设置最小高度,确保内容可见 */
}/* 加载提示样式 */
.loading {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%); /* 居中显示 */font-size: 16px;color: #999; /* 提示文字颜色 */
}
</style>

 使用

javascript"><template><div><chart :option="chartOption"></chart></div>
</template><script setup name="Index">
import { ref} from "vue";
const chartOption = ref({xAxis: {type: "category",boundaryGap: false,data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],},yAxis: {type: "value",},series: [{data: [820, 932, 901, 934, 1290, 1330, 1320],type: "line",areaStyle: {},},],
});</script><style scoped lang="scss"></style>
 效果

 


http://www.ppmy.cn/news/1549712.html

相关文章

中小企业人事管理自动化:SpringBoot实践

第1章 绪论 1.1背景及意义 随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。人们生活水平的不断提高&#xff0c;日常生活中人们对中小企业人事管理系统方面的要求也在不断提高&#xff0c;随着中小企业人事受到广大员工的关注&#xff0c;使得中小企业人事管理系统…

Java 序列化详解

一、什么是序列化和反序列化? 如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中&#xff0c;或者在网络传输 Java 对象&#xff0c;这些场景都需要用到序列化。 简单来说&#xff1a; 序列化&#xff1a;在序列化过程中&#xff0c;对象的状态被保存为一连串的字节…

什么是驱动芯片?

驱动芯片&#xff08;Driver Chip&#xff09;是一种集成电路芯片&#xff0c;主要用于驱动和控制各种电子设备或系统中的外部负载&#xff0c;如电机、显示屏、音频设备、LED 灯等&#xff0c;以下是关于驱动芯片的详细介绍&#xff1a; 主要功能 信号转换与放大&#xff1a;…

中国电信星辰大模型:软件工厂与文生视频技术的深度解析

在科技日新月异的今天,人工智能(AI)技术正以惊人的速度改变着我们的生活和工作方式。作为这一领域的领军企业之一,中国电信凭借其强大的研发实力和深厚的技术积累,推出了星辰大模型,旨在为用户带来更加智能、高效、便捷的服务体验。本文将重点介绍中国电信星辰大模型中的…

ubuntu安装ros1

以Ubuntu 18.04为例&#xff1a; 1.如果源没有切换到国内的建议切换 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo vi /etc/sources.list删除原来的源切换到清华大学源 # 默认注释了源码镜像以提高 apt update 速度&#xff0c;如有需要可自行取消注释 de…

并查集---服务器广播

题目描述 服务器连接方式包括直接相连&#xff0c;间接相连。A和B直接连接&#xff0c;B和C直接连接&#xff0c;则A和C间接连接。直接连接和间接连接都可以发送广播。 给出一个 N * N 数组&#xff0c;代表N个服务器&#xff0c; matrix[i][j] 1&#xff0c;则代表 i 和 j …

IText创建加盖公章的pdf文件并生成压缩文件

第一、前言 此前已在文章&#xff1a;Java使用IText根据pdf模板创建pdf文件介绍了Itex的基本使用技巧&#xff0c;本篇以一个案例为基础&#xff0c;主要介绍IText根据pdf模板填充生成pdf文件&#xff0c;并生成压缩文件。 第二、案例 以下面pdf模板为例&#xff0c;生成一个p…

如何使用docker、docker挂载数据,以及让docker使用宿主机器的GPU环境 + docker重启小妙招

最近的工作和学习需要我使用docker&#xff0c;浅浅的学了一下&#xff0c;记录在这&#xff1a;下载docker镜像&#xff0c;用docker打包我的项目和环境&#xff0c;让docker使用宿主机器的GPU环境&#xff0c;将数据挂载在docker容器内&#xff0c;保存一个新的镜像等。最后加…