g2plot如何实现面积图和折线图的动态切换?

一开始的时候显示的是面积图:
在这里插入图片描述

当我点击折线图的时候,要变成折线图:
在这里插入图片描述

当我再点击面积图的时候,还要变回面积图:
在这里插入图片描述

要实现这个功能,得知道g2plot几个重要的API。

参考文档如下:https://g2plot.antv.antgroup.com/api/plot-api

第一个是render方法:
在这里插入图片描述

第二个是update方法:
在这里插入图片描述

第三个是destory方法:
在这里插入图片描述

另外,我们还需要知道vue的监听器是什么,怎么使用的。

这里说一下我的思路:

  • 1、页面挂载的时候加载数据,渲染画布,默认使用面积图
  • 2、监听图标类型的改变,如果改变了,先销毁原来的图,再根据图表类型创建新的图,然后渲染

最终的完整代码如下:

<script setup>
import {onMounted, reactive, ref, watch} from "vue";
import {Line, Area} from "@antv/g2plot";
import axios from "axios";
import {MdPreview, MdEditor} from 'md-editor-v3';
import 'md-editor-v3/lib/style.css';
import {message} from "ant-design-vue";const editText = ref()
const text = ref();
const activeKey = ref('chart');
const chart = ref()
const chartType = ref("area")
const data = ref([])
const blog = ref()
const uniKey = "/area/switch_line"
const isEdit = ref(false)
const title = ref("")
const description = ref("")const updateBlog = async (data) => {console.log(data)await axios({method: "put",url: `http://127.0.0.1:8888/zdppy_amblog_markdown/${blog.value.id}`,data,}).then(() => {message.success("修改代码成功")activeKey.value = "code"})
}const loadBlog = async () => {await axios({method: "get",url: `http://127.0.0.1:8888/zdppy_amblog_markdown?uniKey=${uniKey}`,}).then(resp => {console.log("loadBlog", resp.data)if (resp.data && resp.data.data && resp.data.data.results && resp.data.data.results.length > 0) {blog.value = resp.data.data.results[0]text.value = blog.value.contenttitle.value = blog.value.titledescription.value = blog.value.descriptioneditText.value = blog.value.contentisEdit.value = true}})
}const saveBlog = async (data) => {console.log("save", data)await axios({method: "post",contentType: "application/json",url: "http://127.0.0.1:8888/zdppy_amblog_markdown",data,}).then(() => {message.success("保存代码成功")activeKey.value = "code"})
}const handleEditorSubmit = async () => {if (!title.value) {message.warning("文章的标题不能为空")return}if (!editText.value) {message.warning("文章的内容不能为空")return;}const data = {uniKey,title: title.value,description: description.value,content: editText.value,}if (isEdit.value) {await updateBlog(data)} else {await saveBlog(data)}await loadBlog()
}const loadData = async () => {await axios({method: "get",url: "http://127.0.0.1:8888/zdppy_amg2plot_line",params: {size: 10000,year: "notnull",category: "null",order: "keyDate",}}).then(resp => {if (resp.data && resp.data.data && resp.data.data.results) {data.value = resp.data.data.results}})
}const renderChart = async () => {if (!chart.value) {chart.value = new Area('container', {})}const options = {data: data.value,xField: 'year',yField: 'value',}chart.value.update(options)chart.value.render();
}watch(chartType, async (value, oldValue) => {console.log("xxx", value, oldValue)if (chart.value) {chart.value.destroy();}switch (value) {case "area":chart.value = new Area('container', {})breakcase "line":chart.value = new Line('container', {})break}await renderChart()
})onMounted(async () => {await loadBlog()await loadData()await renderChart()
})</script><template><a-tabs v-model:activeKey="activeKey"><a-tab-pane key="chart" tab="图表"><div style="margin-bottom: 10px;"><a-radio-group v-model:value="chartType"><a-radio-button value="area">面积图</a-radio-button><a-radio-button value="line">折线图</a-radio-button></a-radio-group></div><div id="container"></div></a-tab-pane><a-tab-pane key="code" tab="源码"><MdPreview v-model="text"/></a-tab-pane><a-tab-pane key="edit" tab="编辑"><a-form-item label="标题"><a-input v-model:value="title"/></a-form-item><a-form-item label="描述"><a-textarea v-model:value="description"/></a-form-item><a-form-item label="内容"><MdEditor v-model="editText"/></a-form-item><a-form-item><a-buttontype="primary"html-type="submit"style="margin-left: 40px"@click="handleEditorSubmit">提交</a-button></a-form-item></a-tab-pane></a-tabs>
</template><style scoped>
#config {margin-bottom: 20px;
}#config .config-item {display: flex;justify-content: start;align-items: center;
}#config .label {margin-right: 15px;
}
</style>

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

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

相关文章

防火墙之双机热备篇

为什么要在防火墙上配置双机热备技术呢&#xff1f; 相信大家都知道&#xff0c;为了提高可靠性&#xff0c;避免单点故障 肯定有聪明的小伙伴会想到那为什么不直接多配置两台防火墙&#xff0c;然后再将他们进行线路冗余&#xff0c;不就完成备份了吗&#xff1f; 答案是不…

JDK、JRE、JVM的区别java的基本数据类型

说一说JDK、JRE、JVM的区别在哪&#xff1f; JDK&#xff1a; Java Delopment kit是java工具包&#xff0c;包含了编译器javac&#xff0c;调试器&#xff08;jdb&#xff09;以及其他用于开发和调试java程序的工具。JDK是开发人员在开发java应用程序时候所需要的的基本工具。…

海外社媒矩阵为何会被关联?如何IP隔离?

在当今的数字时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分。通过社交媒体&#xff0c;人们可以与朋友互动&#xff0c;分享生活&#xff0c;甚至进行业务推广和营销。然而&#xff0c;社交媒体账号关联问题逐渐受到广泛关注。社交媒体账号为何会关联&#…

问题清除指南|成功解决pipmatplotlib因为ConnectTimeoutError更新失败问题

前言&#xff1a;跑baseline需要升级matplotlib和pip&#xff0c;在此记录一个错误和一个「别致」的解决方案。 北京时间 14:00 左右&#xff0c;在终端环境中运行命令python -m pip install --upgrade pip&#xff0c;报错&#xff1a; 多次尝试&#xff0c;未果。 隔天上午 0…

Elasticsearch 企业级实战 01:Painless 脚本如何调试?

在企业级应用中&#xff0c;Elasticsearch 常常被用来处理复杂的数据查询和操作。 Painless 是 Elasticsearch 的内置脚本语言&#xff0c;虽然强大&#xff0c;但调试起来并不容易。 本文将详细介绍如何在实战中有效调试 Painless 脚本&#xff0c;以提高开发和运维效率。 本文…

2.javaWeb_请求和响应的处理(Request,Response)

2.请求和响应的处理 文章目录 2.请求和响应的处理一、动态资源和静态资源javax.servlet(包) 二、Servlet体系1.简介2.HttpServlet3.Servlet生命周期 三、Request对象1.ServletRequest1)ServletRequest主要功能有&#xff1a;2)ServletRequest类的常用方法: 2.HttpServletReques…

通过SchedulingConfigurer 接口完成动态定时任务

通过SchedulingConfigurer 接口完成动态定时任务 一.背景 在Spring中&#xff0c;除了使用Scheduled注解外&#xff0c;还可以通过实现SchedulingConfigurer接口来创建定时任务。它们之间的主要区别在于灵活性和动态性。Scheduled注解适用于固定周期的任务&#xff0c;一旦任…

生成式 AI 的未来,对话系统 (Chat)与自主代理 (Agent)相辅相成

目录 1. 概念解释生成式 AI对话系统 (Chat)自主代理 (Agent) 2. 代码示例对话系统示例 (使用 Python 和 NLTK 库)自主代理示例 (使用 Python 模拟简单的自主学习) 3. 逻辑性分析4. 通俗易懂的解释5. 与其他相似概念的对比6. 常见问题和解答7. 技术挑战与解决方案对话系统的技术…

内容安全(深度行为检测技术、IPS、AV、入侵检测方法)

1、深度行为检测技术 深度行为检测技术&#xff1a;是一种基于深度学习和机器学习的技术&#xff0c;它通过分析用户在网络中的行为模式&#xff0c;识别异常或潜在威胁行为&#xff0c;从而保护网络安全和内容安全 分类&#xff1a; 深度包检测技术&#xff08;Deep Packet…

Kafka Producer发送消息流程之消息异步发送和同步发送

文章目录 1. 异步发送2. 同步发送 1. 异步发送 Kafka默认就是异步发送&#xff0c;在Main线程中的多条消息&#xff0c;没有严格的先后顺序&#xff0c;Sender发送后就继续下一条&#xff0c;异步接受结果。 public class KafkaProducerCallbackTest {public static void mai…

Unity Apple Vision Pro 开发(四):体积相机 Volume Camera

文章目录 &#x1f4d5;教程说明&#x1f4d5;教程内容概括&#x1f4d5;体积相机作用&#x1f4d5;创建体积相机&#x1f4d5;添加体积相机配置文件&#x1f4d5;体积相机配置文件参数&#x1f4d5;体积相机的边界盒大小&#x1f4d5;体积相机边界盒大小和应用边界盒大小的区别…

【GraphRAG】微软 graphrag 效果实测

GraphRAG 本文将基于以下来源&#xff0c;对Microsoft GraphRAG分析优缺点、以及示例实测分析。 1. Source 代码仓库&#xff1a; Welcome to GraphRAGhttps://microsoft.github.io/graphrag/ 微软文章1&#xff08;2024.2.13&#xff09;&#xff1a;GraphRAG: Unlocking…

Hadoop3:MR程序的数据倾斜问题处理

一、数据倾斜 什么是数据倾斜&#xff1f; 学过Redis集群的都知道数据倾斜这个问题。 就是大量数据&#xff0c;分配不均匀的现象。 二、MR数据倾斜 1、怎么判断出现数据倾斜&#xff1f; 数据频率倾斜——某一个区域的数据量要远远大于其他区域。 数据大小倾斜——部分记…

Android中OkHttp3中超时时间概述

目录 前言connectTimeoutreadTimeoutwriteTimeoutcallTimeoutpingInterval拓展 前言 可以看到&#xff0c;使用还是很简单的。主要相关的有这五个参数&#xff0c;其中我们常用到是就是connectTimeout、readTimeout和writeTimeout。 再看上图&#xff0c;可以看到默认下connec…

js | Core

http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ Object 是什么&#xff1f; 属性[[prototype]]对象。 例如&#xff0c;下面的&#xff0c;son是对象&#xff0c;foo不是对象。打印出来的son&#xff0c;能看到有一个prototype 对象。 prototype vs _proto_ v…

R语言实现神经网络ANN

# 常用激活函数 # 自定义Sigmoid函数 sigmod <- function(x){return(1/(1exp(-x))) } # 绘制Sigmoid曲线 x <- seq(-10,10,length.out 100) plot(x,sigmod(x),type l,col blue,lwd 2,xlab NA,ylab NA,main Sigmoid函数曲线)# 自定义Tanh函数 tanh <- function(…

Qt QProcess 进程间通信读写数据通信

本文介绍了如何使用Qt的QProcess 进行程序开发&#xff0c;包括启动进程间通信、设置环境变量、通用方法&#xff1b;方便在日常开发中使用&#xff1b; 1.使用Qt进行程序开发&#xff0c;可以通过QProcess类用于启动外部程序并与其进行通信.&#xff1b; 进程A&#xff08;…

微服务设计原则——高性能:锁

文章目录 1.锁的问题2.无锁2.1 串行无锁2.2 无锁数据结构 3.减少锁竞争参考文献 1.锁的问题 高性能系统中使用锁&#xff0c;往往带来的坏处要大于好处。 并发编程中&#xff0c;锁带解决了安全问题&#xff0c;同时也带来了性能问题&#xff0c;因为锁让并发处理变成了串行操…

海外营销推广:快速创建维基百科(wiki)词条-大舍传媒

一、维基百科的永久留存问题 许多企业和个人关心维基百科是否能永久留存。实际上&#xff0c;只要企业和个人的行为没有引起维基百科管理方的反感&#xff0c;词条就可以长期保存。如果有恶意行为或被投诉&#xff0c;维基百科可能会对词条进行删除或修改。 二、创建维基百科…

TCP与UDP网络编程

网络通信协议 java.net 包中提供了两种常见的网络协议的支持: UDP&#xff1a;用户数据报协议(User Datagram Protocol)TCP&#xff1a;传输控制协议(Transmission Control Protocol) TCP协议与UDP协议 TCP协议 TCP协议进行通信的两个应用进程&#xff1a;客户端、服务端 …