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

相关文章

SpringBoot全局异常拦截与自定义错误页面实现过程解读

《SpringBoot全局异常拦截与自定义错误页面实现过程解读》本文介绍了SpringBoot中全局异常拦截与自定义错误页面的实现方法,包括异常的分类、SpringBoot默认异常处理机制、全局异常拦... 目录一、引言二、Spring Boot异常处理基础2.1 异常的分类2.2 Spring Boot默

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

Python使用Matplotlib和Seaborn绘制常用图表的技巧

《Python使用Matplotlib和Seaborn绘制常用图表的技巧》Python作为数据科学领域的明星语言,拥有强大且丰富的可视化库,其中最著名的莫过于Matplotlib和Seaborn,本篇... 目录1. 引言:数据可视化的力量2. 前置知识与环境准备2.1. 必备知识2.2. 安装所需库2.3

python项目环境切换的几种实现方式

《python项目环境切换的几种实现方式》本文主要介绍了python项目环境切换的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 如何在不同python项目中,安装不同的依赖2. 如何切换到不同项目的工作空间3.创建项目

Python结合Free Spire.PDF for Python实现PDF页面旋转

《Python结合FreeSpire.PDFforPython实现PDF页面旋转》在日常办公或文档处理中,我们经常会遇到PDF页面方向错误的问题,本文将分享如何用Python结合FreeSpir... 目录基础实现:单页PDF精准旋转完整代码代码解析进阶操作:覆盖多场景旋转需求1. 旋转指定角度(90/27

使用Python实现在PDF中添加、导入、复制、移动与删除页面

《使用Python实现在PDF中添加、导入、复制、移动与删除页面》在日常办公和自动化任务中,我们经常需要对PDF文件进行页面级的编辑,使用Python,你可以轻松实现这些操作,而无需依赖AdobeAc... 目录1. 向 PDF 添加空白页2. 从另一个 PDF 导入页面3. 删除 PDF 中的页面4. 在

Qt实现删除布局与布局切换功能

《Qt实现删除布局与布局切换功能》在Qt应用开发中,动态管理布局是一个常见需求,比如根据用户操作动态删除某个布局,或在不同布局间进行切换,本文将详细介绍如何实现这些功能,并通过完整示例展示具体操作,需... 目录一、Qt动态删除布局1. 布局删除的注意事项2. 动态删除布局的实现步骤示例:删除vboxLay

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页