Echats-页面切换时echats图表刷新

2023-10-31 08:04

本文主要是介绍Echats-页面切换时echats图表刷新,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 在src文件夹下的composables创建echats.ts

 echats.ts的内容为:

import { nextTick, effectScope, onScopeDispose, ref, watch } from 'vue';
import type { ComputedRef, Ref } from 'vue';
import * as echarts from 'echarts/core';
import { BarChart, GaugeChart, LineChart, PictorialBarChart, PieChart, RadarChart, ScatterChart } from 'echarts/charts';
import type {BarSeriesOption,GaugeSeriesOption,LineSeriesOption,PictorialBarSeriesOption,PieSeriesOption,RadarSeriesOption,ScatterSeriesOption
} from 'echarts/charts';
import {DatasetComponent,GridComponent,LegendComponent,TitleComponent,ToolboxComponent,TooltipComponent,TransformComponent
} from 'echarts/components';
import type {DatasetComponentOption,GridComponentOption,LegendComponentOption,TitleComponentOption,ToolboxComponentOption,TooltipComponentOption
} from 'echarts/components';
import { LabelLayout, UniversalTransition } from 'echarts/features';
import { CanvasRenderer } from 'echarts/renderers';
import { useElementSize } from '@vueuse/core';
import { useThemeStore } from '@/store';export type ECOption = echarts.ComposeOption<| BarSeriesOption| LineSeriesOption| PieSeriesOption| ScatterSeriesOption| PictorialBarSeriesOption| RadarSeriesOption| GaugeSeriesOption| TitleComponentOption| LegendComponentOption| TooltipComponentOption| GridComponentOption| ToolboxComponentOption| DatasetComponentOption
>;echarts.use([TitleComponent,LegendComponent,TooltipComponent,GridComponent,DatasetComponent,TransformComponent,ToolboxComponent,BarChart,LineChart,PieChart,ScatterChart,PictorialBarChart,RadarChart,GaugeChart,LabelLayout,UniversalTransition,CanvasRenderer
]);/*** Echarts hooks函数* @param options - 图表配置* @param renderFun - 图表渲染函数(例如:图表监听函数)* @description 按需引入图表组件,没注册的组件需要先引入*/
export function useEcharts(options: Ref<ECOption> | ComputedRef<ECOption>,renderFun?: (chartInstance: echarts.ECharts) => void
) {const theme = useThemeStore();const domRef = ref<HTMLElement>();const initialSize = { width: 0, height: 0 };const { width, height } = useElementSize(domRef, initialSize);let chart: echarts.ECharts | null = null;function canRender() {return initialSize.width > 0 && initialSize.height > 0;}function isRendered() {return Boolean(domRef.value && chart);}function update(updateOptions: ECOption) {if (isRendered()) {chart?.clear();chart!.setOption({ ...updateOptions, backgroundColor: 'transparent' });}}async function render() {if (domRef.value) {const chartTheme = theme.darkMode ? 'dark' : 'light';await nextTick();chart = echarts.init(domRef.value, chartTheme);if (renderFun) {renderFun(chart);}update(options.value);}}function resize() {chart?.resize();}function destroy() {chart?.dispose();}function updateTheme() {destroy();render();}const scope = effectScope();scope.run(() => {watch([width, height], ([newWidth, newHeight]) => {initialSize.width = newWidth;initialSize.height = newHeight;if (newWidth === 0 && newHeight === 0) {// 节点被删除 将chart置为空chart = null;}if (canRender()) {if (!isRendered()) {render();} else {resize();}}});watch(options,newValue => {update(newValue);},{ deep: true });watch(() => theme.darkMode,() => {updateTheme();});});onScopeDispose(() => {destroy();scope.stop();});return {domRef};
}

vue文件下:

<template><div ref="Echart1" style="width:237px;height:250px;"></div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { useEcharts } from '@/composables';const lineOptions = ref({tooltip: {trigger: 'item'},legend: {top: '5%',left: 'center'},// series 渲染的图表,可以配置多个series: [//图表内容]
});
const { domRef: Echart1 } = useEcharts(lineOptions as any);
</script>

这篇关于Echats-页面切换时echats图表刷新的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Python如何在Word中生成多种不同类型的图表

《Python如何在Word中生成多种不同类型的图表》Word文档中插入图表不仅能直观呈现数据,还能提升文档的可读性和专业性,本文将介绍如何使用Python在Word文档中创建和自定义各种图表,需要的... 目录在Word中创建柱形图在Word中创建条形图在Word中创建折线图在Word中创建饼图在Word

Flutter监听当前页面可见与隐藏状态的代码详解

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下... flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.cppcn

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

禁止HTML页面滚动的操作方法

《禁止HTML页面滚动的操作方法》:本文主要介绍了三种禁止HTML页面滚动的方法:通过CSS的overflow属性、使用JavaScript的滚动事件监听器以及使用CSS的position:fixed属性,每种方法都有其适用场景和优缺点,详细内容请阅读本文,希望能对你有所帮助... 在前端开发中,禁止htm