Vue进阶之Vue项目实战(三)

news2024/10/5 14:36:05

Vue项目实战

  • 图表渲染
    • 安装echarts
    • 图表渲染器(图表组件)
      • 图表举例:
        • 创建 ChartsRenderer.vue
        • 创建 ChartsDataTransformer.ts
    • 基于 zrender 开发可视化物料
      • 安装 zrender
      • 画一个矩形
      • 画一个柱状图
    • 基于svg开发可视化物料
      • svg小示例
      • 使用d3进行图表渲染
        • 安装d3
        • 基本使用
        • 地图绘制
    • 本地持久化
    • 拓展知识

图表渲染

安装echarts

package.json:

"dependencies": {
   
    "vue": "3.4.26",
    "vue-echarts":"6.7.1",
    "echarts":"5.5.0"
  },

图表渲染器(图表组件)

一般负责:

  1. 整体图表的基础层数据协议设计
schema:{
   
	type:"line",  //折线图
	data:{
   
		labels:[],
		datasets:[]
	}
}
  1. 基于数据协议的图表渲染逻辑
    渲染逻辑:通用渲染逻辑、特殊渲染逻辑
    BarRenderer.vue、LineRenderer.vue,统一在ChartsRenderer.vue中进行分发渲染(在这一层将不同的图表类型差异磨平)
  2. 图表的事件处理

图表举例:

创建 ChartsRenderer.vue
  • components
    • ChartsRenderer.vue
<template>
 <!-- 一个的写法 -->
 <div class="charts-container" ref="container">charts Renderer</div>
 <!-- 多个的写法 -->
 <!-- <div :ref="(n)=>maps.n=n">charts Renderer1</div>
 <div :ref="(b)=>maps.b=b">charts Renderer2</div>
 <div :ref="(r)=>maps.r=r">charts Renderer3</div> -->
</template>

<script setup lang="ts">
import {
     use,init} from 'echarts'
import {
     BarChart,LineChart} from 'echarts/charts'
import {
     LegendComponent,TooltipComponent} from 'echarts/components';
import {
     onMounted,ref} from 'vue'

use([BarChart,LineChart,LegendComponent,TooltipComponent])

const container=ref<HTMLDivElement|null>(null)
// 多个的写法
// const maps={}


onMounted(()=>{
     
  if(!container.value) return;
  const chartInstance= init(container.value)
  console.log("container",container);
  // 多个的写法
  // console.log("maps",maps);
  chartInstance.setOption({
     
    title:{
     
      text:"Echarts 入门示例"
    },
    tooltip:{
     },
    legend:{
     
      data:['销量']
    },
    xAxis:{
     
      data:['衬衫','羊毛衫','雪纺衫','裤子','高跟鞋','袜子']
    },
    yAxis:{
     },
    series:[
      {
     
        name:"销量",
        type:"bar",
        data:[5,20,36,10,10,20]
      }
    ]
  })
})
</script>


<style scoped>
.charts-container{
     
  width: 500px;
  height: 500px;
  border: 1px solid #ccc;
  border-radius: 4px;
  padding: 10px;
  box-sizing: border-box;
}
</style>

App.vue

<script setup lang="ts">
import ChartsRenderer from './components/ChartsRenderer.vue'
</script>
<template>
  <ChartsRenderer></ChartsRenderer>
</template>

请添加图片描述
项目中:

import {
   use,init,graphic} from 'echarts'
.......
chartInstance.setOption({
   
  color: ['#80FFA5', '#00DDFF', '#37A2FF', '#FF0087', '#FFBF00'],
  title: {
   
    text: '渐变堆叠面积图'
  },
  tooltip: {
   
    trigger: 'axis',
    axisPointer: {
   
      type: 'cross',
      label: {
   
        backgroundColor: '#6a7985'
      }
    }
  },
  legend: {
   
    data: ['Line 1', 'Line 2', 'Line 3', 'Line 4', 'Line 5']
  },
  toolbox: {
   
    feature: {
   
      saveAsImage: {
   }
    }
  },
  grid: {
   
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  xAxis: [
    {
   
      type: 'category',
      boundaryGap: false,
      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    }
  ],
  yAxis: [
    {
   
      type: 'value'
    }
  ],
  series: [
    {
   
      name: 'Line 1',
      type: 'line',
      stack: 'Total',
      smooth: true,
      lineStyle: {
   
        width: 0
      },
      showSymbol: false,
      areaStyle: {
   
        opacity: 0.8,
        color: new graphic.LinearGradient(0, 0, 0, 1, [
          {
   
            offset: 0,
            color: 'rgb(128, 255, 165)'
          },
          {
   
            offset: 1,
            color: 'rgb(1, 191, 236)'
          }
        ])
      },
      emphasis: {
   
        focus: 'series'
      },
      data: [140, 232, 101, 264, 90, 340, 250]
    },
    {
   
      name: 'Line 2',
      type: 'line',
      stack: 'Total',
      smooth: true,
      lineStyle: {
   
        width: 0
      },
      showSymbol: false,
      areaStyle: {
   
        opacity: 0.8,
        color: new graphic.LinearGradient(0, 0, 0, 1, [
          {
   
            offset: 0,
            color: 'rgb(0, 221, 255)'
          },
          {
   
            offset: 1,
            color: 'rgb(77, 119, 255)'
          }
        ])
      },
      emphasis: {
   
        focus: 'series'
      },
      data: [120, 282, 111, 234, 220, 340, 310]
    },
    {
   
      name: 'Line 3',
      type: 'line',
      stack: 'Total',
      smooth: true,
      lineStyle: {
   
        width: 0
      },
      showSymbol: false

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

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

相关文章

【堡垒机小知识】堡垒机资产监控能监控哪些东西呢?

堡垒机&#xff0c;重要的网络安全工具&#xff0c;其资产监控功能在保障系统稳定运行、防范潜在风险方面发挥着至关重要的作用。但不少小伙伴对于监控内容不清楚&#xff0c;这里我们就来一起简单看看&#xff0c;仅供参考~ 堡垒机资产监控能监控哪些东西呢&#xff1f; 【…

Chrome DevTools 使用指南- 控制台篇

1.引言 在当今的前端开发中&#xff0c;Chrome DevTools 已成为开发者们不可或缺的工具。其中控制台是 DevTools 中最常用和最重要的部分之一。 本指南将详细介绍 Chrome DevTools 控制台的各种功能和使用技巧&#xff0c;帮助您更好地利用控制台进行高效调试和开发。无论您是…

微服务Day7学习

文章目录 数据聚合聚合分类 自动补全DSL实现Bucket聚合DSL实现Metrics聚合RestAPI实现聚合多条件聚合对接前端接口拼音分词器自定义分词器自动补全查询实现酒店搜索框自动补全 数据同步数据同步思路分析利用mq实现mysql与elasticsearch数据同步 集群介绍搭建ES集群 数据聚合 聚…

flume使用实例

1、监听端口a1.sources.r1.type netcat 配置文件nc-flume-console.conf # Name the components on this agent a1 表示jvm进程名 a1.sources r1 a1.sinks k1 a1.channels c1 # Describe/configure the source a1.sources.r1.type netcat a1.sources.r1.bind node…

什么是固态继电器?

固态继电器是不需要使用任何机械部件的开关继电器。这通常使它们具有比普通机电继电器寿命更长的优势&#xff0c;然而&#xff0c;尽管固态继电器速度快且耐用&#xff0c;但仍具有某些设计规定。 固态继电器风靡全球&#xff0c;彻底改变了从农业自动化到航空航天等各个行业…

Pytorch梯度下降算法(Gradient Descent)

intro 其实对于我们将要学的梯度最小函数&#xff0c;目的就是先得到loss损失最小的值&#xff0c;然后根据这个最小的值去得到w。 初始点在initial guess这个位置&#xff0c;我们希望找到最小的权重点global cost minimum&#xff0c;我们到底是让这个点左移寻找还是右移寻…

Linux第三十九章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

【全开源】JAVA同城搬家系统源码小程序APP源码

JAVA同城搬家系统源码 特色功能&#xff1a; 强大的数据处理能力&#xff1a;JAVA提供了丰富的数据结构和算法&#xff0c;以及强大的并发处理能力&#xff0c;使得系统能够快速地处理大量的货物信息、司机信息、订单信息等&#xff0c;满足大规模物流的需求。智能路径规划&a…

【Redis】String的介绍与应用详解

大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#xff0c;但是也想日更的人。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4aa;&#x1f4aa;&#x1f4aa…

设置 sticky 不生效?会不会是你还是没懂 sticky?

官方描述 基本上可以看懂的就会知道。sticky 是相对于存在滚动条的内容的&#xff0c;啥意思&#xff1f; 就是不论你被谁包着&#xff0c;你只会往上找有 overflow 属性的盒子进行定位&#xff0c;包括&#xff1a;overflow:hidden; overflow:scroll; overflow:auto; overflo…

一键批量提取TXT文档前N行,高效处理海量文本数据,省时省力新方案!

大量的文本信息充斥着我们的工作与生活。无论是研究资料、项目文档还是市场报告&#xff0c;TXT文本文档都是我们获取和整理信息的重要来源。然而&#xff0c;面对成百上千个TXT文档&#xff0c;如何快速提取所需的关键信息&#xff0c;提高工作效率&#xff0c;成为了许多人头…

EI稳定检索--人文社科类会议(ICBAR 2024)

【ACM独立出版】第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024) 2024 4th International Conference on Big Data, Artificial Intelligence and Risk Management 【高录用•快检索&#xff0c;ACM独立出版-稳定快速EI检索 | 往届均已完成EI, Scopus检索】 【见…

运行vue2项目基本过程

目录 步骤1 步骤2 步骤3 补充&#xff1a; 解决方法&#xff1a; node-scss安装失败解决办法 步骤1 安装npm 步骤2 切换淘宝镜像 #最新地址 淘宝 NPM 镜像站喊你切换新域名啦! npm config set registry https://registry.npmmirror.com 步骤3 安装vue-cli npm install…

分布式中traceId链接服务间的日志

使用技术&#xff1a; 网关&#xff1a;SpringCloudGateway RPC调用&#xff1a;Feign 一&#xff1a;在网关入口处设置header&#xff1a;key-traceId&#xff0c;value-UUID import com.kw.framework.common.croe.constant.CommonConstant; import com.kw.framework.gateway…

机器学习高斯贝叶斯算法实战:判断肿瘤是良性还是恶性

概述 我们使用威斯康星乳腺肿瘤数据集&#xff0c;来构建一个机器学习模型&#xff0c;用来判断患者的肿瘤是良性还是恶性。 数据分析 威斯康星乳腺肿瘤数据集&#xff0c;包括569个病例的数据样本&#xff0c;每个样本具有30个特征值。 样本分为两类&#xff1a;恶性Malig…

SHA1获取

这里写目录标题 JDK获取uniapp开发Dcould获取 JDK获取 一、下载jdk 链接: http://www.oracle.com/ 二、安装直接下一步下一步 三、配置环境变量 先新增变量JAVA_HOME变量值为C:\devUtils\jdk (jdk安装路径位置)再配置Path(%JAVA_HOME%\bin) 四、创建SHA1安全证书 win r输入cmd…

常见应用流量特征分析

目录 1.sqlmap 1.常规GET请求 2.通过--os-shell写入shell 3.post请求 2.蚁剑 编码加密后 3.冰蝎 冰蝎_v4.1 冰蝎3.2.1 4.菜刀 5.哥斯拉 1.sqlmap 1.常规GET请求 使用的是sqli-labs的less7 &#xff08;1&#xff09;User-Agent由很明显的sqlmap的标志&#xff0c;展…

如何快速增加外链?

要快速增加外链并不难&#xff0c;相信各位都知道&#xff0c;难的是快速增加外链且没有风险&#xff0c;所以这时候GNB外链的重要性就出现了&#xff0c;这是一种自然的外链&#xff0c;何谓自然的外链&#xff0c;在谷歌的体系当中&#xff0c;自然外链指的就是其他网站资源给…

[Spring Boot]baomidou 多数据源

文章目录 简述本文涉及代码已开源 项目配置pom引入baomidouyml增加dynamic配置启动类增加注解配置结束 业务调用注解DS()TransactionalDSTransactional自定义数据源注解MySQL2 测试调用查询接口单数据源事务测试多数据源事务如果依然使用Transactional会怎样&#xff1f;测试正…

不同类型的区块链钱包有什么特点和适用场景?

区块链钱包是用于存储和管理加密货币的重要工具&#xff0c;市面上有许多不同类型的区块链钱包可供选择。以下是几种主要类型的区块链钱包及其特点和适用场景。 1.软件钱包&#xff1a; 特点&#xff1a;软件钱包是最常见的一种区块链钱包&#xff0c;通常作为软件应用程序提供…