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

news2024/11/16 23:52:14

文章目录

  • 前言
  • 一、改进之前的封装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>

总结

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

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

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

相关文章

git 学习随笔

git 学习随笔 基本概念 git 对待数据类似快照流的形式而不是类似 cvs 那样的纪录文件随时间逐步积累的差异 git 中所有数据在存储钱都会计算校验和&#xff08;hash) 三种状态&#xff1a;已提交(committed)&#xff0c;已修改(modified)&#xff0c;已暂存(staged)。 add…

计算机图形学入门03:二维变换

变换(Transformation)可分为模型(Model)变换和视图(Viewing)变换。在3D虚拟场景中相机的移动和旋转&#xff0c;角色人物动画都需要变换&#xff0c;用来描述物体运动。将三维世界投影变换到2D屏幕上成像出来&#xff0c;也需要变换。 1.缩放变换 缩放(Scale)变换&#xff1a; …

电脑提示:“找不到vcruntime140_1.dll无法执行”该怎么恢复?一键修复vcruntime140_1.dll丢失

vcruntime140_1.dll是一个关键的系统文件&#xff0c;它在电脑运行过程中被调用。如果该文件丢失或找不到&#xff0c;将会导致弹出"找不到vcruntime140_1.dll无法执行"的错误提示。缺失vcruntime140_1.dll文件将导致软件或游戏无法正常打开或运行。 一键修复vcrunti…

沃飞长空总部落地成都高新,为蓉低空经济发展助力!

5月25日&#xff0c;吉利科技集团与成都高新区签署合作协议&#xff0c;吉利科技集团旗下沃飞长空全球总部落地成都高新区。 根据协议&#xff0c;沃飞长空全球总部项目落地成都未来科技城&#xff0c;将布局总部办公、研发和生产制造低空出行航空器等业务。双方将积极发挥各自…

微信图片识别文字怎么弄?介绍三个识别方法

微信图片识别文字怎么弄&#xff1f;在信息爆炸的时代&#xff0c;我们每天都会接触到大量的图片信息&#xff0c;其中包含的文字内容往往是我们获取信息的重要途径。然而&#xff0c;手动输入图片中的文字既费时又费力&#xff0c;这时&#xff0c;一款能够准确识别微信图片中…

量化交易入门:如何在QMT中配置Python环境,安装第三方依赖包

哈喽,大家好,我是木头左! 引言 QMT,作为量化交易系统中的佼佼者,以其强大的功能和灵活的操作性,受到了广大投资者的青睐。但是,对于很多新手来说,如何在QMT中配置Python环境,安装第三方依赖包,却是一个让人头疼的问题。本文将从零开始,手把手教你如何在QMT中配置Py…

【NumPy】全面解析subtract函数:高效数组减法指南

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

游戏联运平台如何助力游戏行业飞速发展?

随着科技的进步和互联网的普及&#xff0c;游戏行业正以前所未有的速度飞速发展。在这个过程中&#xff0c;游戏联运平台凭借其独特的优势和功能&#xff0c;成为了推动游戏行业腾飞的关键力量。本文将探讨游戏联运平台如何助力游戏行业实现飞速发展。 一、游戏联运平台的定义与…

idea工具配置隐藏文件及文件夹

目录 引言配置步骤实例 引言 我们在使用idea工具编写代码的时候&#xff0c;有些文件和文件夹我们至始至终都不会查看和修改它们&#xff0c;那它们显示在那里就没有任何意义&#xff0c;反而使得项目文件看起来杂乱&#xff0c;一点也不够清爽。这些对我们写代码没有任何作用…

深入了解多维数组索引:以二维数组为例

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、二维数组的基础概念与重要性 二、二维数组的索引访问 1. 索引访问的基本方法 2. 切片…

docker删除所有容器

笔记 要使用 Docker 删除所有容器&#xff08;无论是停止的还是正在运行的&#xff09;&#xff0c;可以按照以下步骤操作&#xff1a; 1. **删除所有正在运行的容器**&#xff1a; 首先&#xff0c;您需要停止所有正在运行的容器。可以使用以下命令&#xff1a; dock…

差分曼彻斯特编码详解

这是一种双向码&#xff0c;和曼彻斯特编码不同的是&#xff0c;这种码元中间的电平转换边只作为定时信号&#xff0c;不表示数据。数据的表示在于每一位开始处是否有电平转换&#xff1a;有电平转换则表示0&#xff0c;无则表示1。然后这就出现一个问题&#xff0c;很多小伙伴…

Pooling Sequencing

1、混合(Pooling)样本测序研究 https://www.jianshu.com/p/19ce438ccccf 1.1 混合测序基础 测序成本虽然下降了,但对于植物育种应用研究来说还是很高,动不动就上百群体,小小植物个体价值又低,测完了很可能后面就用不到了。这时,混合样本测序是一种省钱的好办法。 混池…

qemu使用简介

安装qemu git clone https://github.com/qemu/qemu.git mkdir build cd build ../configure make -j16 make install 编译内核 wget https://mirror.bjtu.edu.cn/kernel/linux/kernel/v5.x/linux-5.10.tar.xz tar -xf linux-5.10.tar.xzsudo apt-get install gcc-arm-linux-g…

小白跟做江科大32单片机之蜂鸣器

1.复制之前编写的工程库项目&#xff0c;详细工程库创建过程如下链接&#xff1a; 小白跟做江科大32单片机之LED闪烁-CSDN博客https://blog.csdn.net/weixin_58051657/article/details/139295351?spm1001.2014.3001.55022.按照江科大老师给的图片进行连接蜂鸣器 3.修改main.c…

不同 Android Studio 版本的 SDK 及 NDK 选择

从 2020 年开始&#xff0c;Android Studio 每年都升级 3 个版本&#xff0c;某些版本甚至有 Patch&#xff0c;对于这些新的版本更新&#xff0c;还是很有必要的&#xff1a; 1. 新功能和改进&#xff1a;不同版本的 Android Studio 会引入新的功能和改进&#xff0c;例如性能…

高精度3D Hall摇杆专用芯片,开启操控新纪元!

昆泰芯正式推出全新一代3D Hall摇杆专用芯片——【KTH577X】&#xff01;这款芯片将为您的操控设备带来前所未有的精准度和响应速度。 产品亮点 一.超高精度&#xff1a;采用最新的3D Hall效应技术&#xff0c;提供16位磁场分辨率&#xff0c;确保每一次操控都精确无误。 二.低…

STL:string

文章目录 标准库中的string类string的构造string的赋值重载string的容量size(length)max_sizeresizereservecapacityclearemptyshink_to_fit string的元素访问operator[] 和 atfront 和 back string的迭代器 和 范围forstring的修改operatorappendpush_backassigninserterasere…

怎么看qq注册时间?你的qq生日居然是这样查看的!

QQ账号就像是一个穿越时空的日记本&#xff0c;每一个聊天记录、每一条动态都是时间的印记。而QQ注册时间&#xff0c;便是这本日记本的开篇第一章&#xff0c;它见证了你的网络生活的起点。怎么看qq注册时间呢&#xff1f;别着急&#xff0c;接下来我将为你揭晓答案。 操作环境…

小白windows系统从零开始本地部署大模型全记录

大家好&#xff0c;最近两年大语言模型风靡全球&#xff0c;最近&#xff0c;不少开源大模型&#xff0c;将模型部署到自己的电脑上&#xff0c;用个性化的数据微调想必是不少人的愿望&#xff0c;这次&#xff0c;让我来分享从hugging face上下载部署chatglm3-6b中的经验。 1.…