Vue3实战笔记(50)—Vue 3+ECharts还能看股票?附源码

文章目录

  • 前言
  • 一、改进之前的封装echarts组件
  • 二、封装股票k线图
  • 总结


前言

今天封装股票k线图组件
前几天学的几个知识点都有用到,都是在封装k线图的时候遇到的问题,又啃了一遍基础。


一、改进之前的封装echarts组件

在这里插入图片描述
使用ref对象方式封装useEChartsRef.ts的时候,遇到了不能自适应窗口大小的问题,由于ECharts实例内部复杂,最后决定复杂逻辑的时候选择了使用Reactive方式封装useEChartsReactive.ts。上源码:
useEChartsRef.ts:

import { ref, onMounted, onUnmounted, reactive } from 'vue';
import * as echarts from 'echarts';

export default function useECharts(chartContainer: { value: HTMLElement | null | undefined; }, options: { value: any; },chartsEvent?:any|string|undefined) {
  const chartInstance:any = ref(null); //问题记录:如果 new Object 点击事件不能传入没有声明的实例,如果ref对象,有些实例放大缩小函数调用报错取不到值,可能是.value的原因。目前用reactive对象

  onMounted(() => {
    // 初始化 ECharts 实例
    chartInstance.value = echarts.init(chartContainer.value);
    // 设置 ECharts 配置项
    chartInstance.value.setOption(options.value);
    if(chartsEvent!=undefined){
      //目前只封装了点击事件
      chartInstance.value.on('click',chartsEvent)
    }
    // 监听窗口大小变化,自动调整图表大小
    window.addEventListener('resize', () => {
      if(!chartInstance.value.isDisposed()){//如果组件没有销毁
        chartInstance.value.resize()
      }
    });
  });

  onUnmounted(() => {
    // 销毁 ECharts 实例
    console.log("组件卸载,销毁echarts实例")
    chartInstance.value.dispose();
    // 移除窗口大小变化监听器
    window.removeEventListener('resize', () => {
      if(!chartInstance.value.isDisposed()){//如果组件没有销毁,避免其他界面的组件销毁了提示警告
        chartInstance.value.resize()
      }
    });
  });

  // 返回 ECharts 实例,以便在外部进行操作
  return chartInstance;
}

useEChartsReactive.ts:


import { ref, onMounted, onUnmounted, reactive } from 'vue';
import * as echarts from 'echarts';

export default function useEChartsReactive(chartContainer: { value: HTMLElement | null | undefined; }, options: { value: any; },chartsEvent?:any|string|undefined) {
  let chartInstance:any = reactive({}); //问题记录:如果 new Object 点击事件不能传入没有声明的实例,如果ref对象,有些实例放大缩小函数调用报错取不到值,可能是.value的原因。目前用reactive对象

  //在外部用onMounted时候调用本方法初始化
  chartInstance = echarts.init(chartContainer.value);
    // 设置 ECharts 配置项
  chartInstance.setOption(options.value);

  onUnmounted(() => {
    // 销毁 ECharts 实例
    console.log("组件卸载,销毁echarts实例")
    chartInstance.dispose();
    // 移除窗口大小变化监听器
    window.removeEventListener('resize', () => {
      if(!chartInstance.isDisposed()){//如果组件没有销毁,避免其他界面的组件销毁了提示警告
        chartInstance.resize()
      }
    });
  });

  // 返回 ECharts 实例,以便在外部进行操作
  return chartInstance;
}

二、封装股票k线图

代码如下EChartsCandlestickReactive.vue::


<template>
    <div ref="chartContainer" style="width: 100%; height: 400px"></div>
  </template>
  
  <script setup lang="ts" name="">
  import { ref,onMounted } from 'vue';
  import useEChartsReactive from '@/hooks/useEChartsReactive';
  
  
  const chartContainer = ref(null);
  const options = ref({
  xAxis: {
    data: ['2024-04-01', '2024-04-02', '2024-04-03', '2024-04-04','2024-04-05','2024-04-06','2024-04-07','2024-04-08','2024-04-09']
  },
  yAxis: {},
  series: [
    {
      type: 'candlestick',
      data: [
        [20, 34, 10, 38],
        [40, 35, 30, 50],
        [38, 38, 33, 44],
        [20, 34, 10, 38],
        [40, 35, 30, 50],
        [43, 38, 33, 44],
        [20, 34, 10, 38],
        [40, 41, 30, 50],
        [31, 64, 27, 66]
      ]
    }
  ]
});

    onMounted(() => {
  // 初始化 ECharts 实例
 

  let chartInstance = useEChartsReactive(chartContainer, options);

    //传入方法
    const echartsfn = function () {
      chartInstance.setOption({
          title: {
          backgroundColor: '#ec0000',
          text: '标题' ,
          bottom: 0,
          right: '10%',
          width: 100,
          textStyle: {
              fontSize: 12,
              color: '#fff'
          }
          }
      })
    }
    if(echartsfn!=undefined){
      //目前只封装了点击事件
      chartInstance.on('click',echartsfn)
    }
  // 监听窗口大小变化,自动调整图表大小
  window.addEventListener('resize', () => {
    if(!chartInstance.isDisposed()){//如果组件没有销毁
      chartInstance.resize()
    }
  });
});

</script>
  
  <style lang='scss' scoped>
</style>

总结

世间所有的相遇,都是久别重逢。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

端到端目标检测 |从DETR 到 GroundingDINO

文章目录 一&#xff0c;DETR1. 简介2. 亮点3. 细节4. 总结一下 二&#xff0c;GroundingDINOGrounding DINO的整体流程Grounding DINO的目标函数 一&#xff0c;DETR 之前的目标检测框架&#xff0c;需要很多的人工干预&#xff0c;很多的先验知识&#xff0c;而且可能还需要…

从简单到复杂,红酒配餐的层次感与变化

红酒配餐是一种艺术&#xff0c;通过不同层次的搭配&#xff0c;可以呈现出丰富的味觉变化&#xff0c;使每一口都充满惊喜。云仓酒庄雷盛红酒以其卓着的品质和与众不同的口感&#xff0c;为红酒配餐提供了无限可能。从简单到复杂&#xff0c;红酒配餐的层次感与变化如下&#…

这几个素材网站,是B站up主的剪辑素材宝藏库!

1.Videvo 这是一个提供完全免费的视频的网站&#xff0c;主要收集互联网免费的视频片段 网站目前收录了超过2700部高清短片&#xff0c;并且每周都会更新 2.电影预告片资源网——预告片世界 预告片世界是一个个人网站&#xff0c;为粉丝提供最新的高清电影预告片资源的在线观…

ThingsBoard物联网网关在智慧城市数据采集中的应用

智慧城市由监控中心、采集网关、前端采集设备、前端感应执行器组成。 为何选用ThingsBoard作为平台 监控中心为物联网平台&#xff0c;该平台包含云计算、大数据、人工智能、物联网、GIS、云安全等主要模块&#xff0c;具备数据采集、数据交换、超大规模计算、数据分析、数据应…

地理信息系统(GIS)软件的最新进展

在数字化转型的浪潮中&#xff0c;地理信息系统&#xff08;GIS&#xff09;作为连接现实与数字世界的桥梁&#xff0c;其软件和技术的每一次迭代升级都在推动着空间信息处理和分析能力的飞跃。作为地理信息与遥感领域的探索者&#xff0c;本文将带您深入了解GIS软件的最新进展…

任务3.1:采用面向对象方式求三角形面积

面向对象编程&#xff08;OOP&#xff09;是一种将现实世界中的实体抽象为对象&#xff0c;并通过类和对象来模拟现实世界中的行为和属性的编程范式。在本实战任务中&#xff0c;我们通过创建一个Triangle类来模拟现实世界中的三角形&#xff0c;并使用面向对象的方法来求解三角…

好用的国产大文件传输软件有哪些,快来看看吧

在这个数字化飞速发展的时代&#xff0c;我们每天都在与各种文件打交道&#xff0c;从简单的文档到庞大的视频素材&#xff0c;文件的体积越来越大&#xff0c;传统的文件传输方式逐渐显得力不从心。面对这个挑战&#xff0c;大文件传输软件应运而生&#xff0c;它们不仅解决了…

小红书图文笔记怎么做?纯干货!

小红书图文笔记的制作是一门艺术&#xff0c;它需要结合精美的图片和有价值的内容&#xff0c;以吸引和留住用户的注意力。伯乐网络传媒给大家分享制作小红书图文笔记的干货指南&#xff0c;包括准备、制作、发布和优化的各个环节。 一、准备阶段 确定目标受众&#xff1a;找到…

Plesk面板上网站无法访问如何查看日志

近期我的网站出现无法访问的问题&#xff0c;这边想要查询为什么出现无法访问的原因&#xff0c;但不知道如何在主机上面进行检查&#xff0c;由于我使用的Hostease的Windows虚拟主机产品默认带普通用户权限的Plesk面板&#xff0c;因此联系Hostease的咨询了Hostease技术支持&a…

Vue+AntDesignVue实现a-tree树形组件的层级选中功能

文章目录 一、构建树形组件二、js代码实现 最近碰到了一个新需求&#xff0c;使用树形选择器实现角色管理功能&#xff0c;当用户选中一个节点时&#xff0c;其所有子节点都会被自动选中&#xff1b;同样&#xff0c;当用户取消选中一个节点时&#xff0c;其所有子节点也会被取…

Pandas格式化DataFrame的浮点数列

在呈现数据的同时&#xff0c;以所需的格式显示数据也是一个重要而关键的部分。有时&#xff0c;值太大了&#xff0c;我们只想显示其中所需的部分&#xff0c;或者我们可以说以某种所需的格式。 让我们看看在Pandas中格式化DataFrame的数值列的不同方法。 例1&#xff1a;将…

九章云极DataCanvas公司DingoDB完成中国信通院权威多模数据库测试

2024年5月16日&#xff0c;九章云极DataCanvas公司自主研发和设计的开源多模向量数据库DingoDB顺利完成中国信息通信研究院&#xff08;以下简称中国信通院&#xff09;多模数据库产品测试。本次测试的成功标志着DingoDB在技术能力、性能表现和产品稳定性方面得到了权威机构的高…

AI绘画(Stable Diffusion)喂饭级教程-第2篇(SD大模型详解)

SD大模型的概念及基础知识 先做一个比喻 如果SD是一个画师&#xff0c;那么大模型就是画师的大脑&#xff01; 就是可惜&#xff0c;这个大脑有点轴&#xff0c;它只能想象出自己喜欢的画面。 比如你用了一个二次元的大脑&#xff0c;它想出来的画面就是这样的&#xff1a; …

杨校老师课题之基于Idea的SSM实训项目案例开发之在线手机商城开发(一)【非常适合初学者】

1.前期配置 2.开发涉及技术栈和工具 2.1 技术栈 后端: SSM前端&#xff1a;Html、CSS、BootStrap(官方定义好的CSS样式)数据库: MySQL 2.2 开发环境(工具) 进行本次开发&#xff0c;需要具备如下环境: JDK a. JDK8.0/1.8 b. 注意&#xff1a; 没有JDK是无法运行IdeaIDEA a. …

OpenCV:入门(四)

形态学操作 形态学&#xff0c;即数学形态学&#xff08;Mathematical Morphology&#xff09;&#xff0c;是图像处理过程中一个非常重要的研 究方向。形态学主要从图像内提取分量信息&#xff0c;该分量信息通常对于表达和描绘图像的形状具有 重要意义&#xff0c;通常是图像…

番外篇 | YOLOv8改进之引入YOLOv9的RepNCSPELAN4模块 | 替换YOLOv8的C2f

前言:Hello大家好,我是小哥谈。YOLOv9,作为YOLO(You Only Look Once)系列的最新成员,代表着实时物体检测技术的又一重要里程碑。自YOLO系列算法诞生以来,它就以其出色的性能和简洁的设计思想赢得了广泛的关注和认可。从最初的YOLOv1到如今的YOLOv9,这个系列不断地进行技…

【学习Day2】计算机基础

✍&#x1f3fb;记录学习过程中的输出&#xff0c;坚持每天学习一点点~ ❤️希望能给大家提供帮助~欢迎点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;指点&#x1f64f; 1.4 校验码 奇偶校验 ● 奇偶校验码的编码方法是&#xff1a; 由若干位有效信息的头部或者…

JAVA云HIS医院管理系统源码 云HIS系统源码 云HIS的优势 云HIS的发展

JAVA云HIS医院管理系统源码 云HIS系统源码 云HIS的优势 云HIS的发展 HIS系统&#xff0c;即医院信息系统&#xff08;Hospital Information System&#xff09;&#xff0c;在医院的运营和管理中扮演着至关重要的角色。关于HIS系统的溯源&#xff0c;简单从以下几个方面进行讲…

失落的方舟 命运方舟台服封号严重 游戏封IP怎么办

步入《失落的方舟》&#xff08;Lost Ark&#xff09;&#xff0c;这款由Smilegate精心打造的宏大规模在线角色扮演游戏&#xff08;MMORPG&#xff09;&#xff0c;您将启程前往阿克拉西亚这片饱经沧桑的奇幻大陆&#xff0c;展开一场穿越时空的壮阔探索。在这里&#xff0c;一…

zabbix客户端启用ping脚本 , 采集结果返回服务端

1.Zabbix-agent配置 (1) 查看自定义配置的目录位置 # more /etc/zabbix/zabbix_agentd.conf (2) 将配置的脚本放在指定的目录下 # cd /etc/zabbix/zabbix_agentd.d # vi get_ping.conf UserParameter=get_ping[*], /bin/ping -c 1 -W 1 $1 &> /dev/null &a…