Vue3 Element-UI中使用ECharts(前端数据展示开发)

  • 前端数据展示(数据可视化、数据大屏等)可使用的工具比较多,很多第三方都提供了在线平台,比如阿里云,只需数据接口,在线配置一下界面即可使用。

    1. 阿里云的使用:利用阿里云物联网平台(IoT)实现WEB数据可视化
    2. 第三方平台对比:有哪些免费简单的数据展示(数据可视化)网站
  • 也可以使用开源代码自己开发前端,本文所介绍的就是ECharts的开发,这是一款基于JavaScript 的开源可视化图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

    1. 官方网站:https://echarts.apache.org/zh/index.html
    2. 官方示例:https://echarts.apache.org/examples/zh/index.html
    3. 官方指南:https://echarts.apache.org/handbook/zh/get-started/

注意,本文是在Vue3版本下的Element-UI中使用,ECharts官网打开较慢,可尝试翻越。

在这里插入图片描述

安装

npm install echarts --save

调用

创建一个*.vue页面,实现方法如下三种。

1. 本页数据

修改官方代码:https://echarts.apache.org/handbook/zh/basics/import

<template><div id="main" style="width: 600px;height:400px;"></div>
</template><script setup>
import * as echarts from 'echarts'
</script><script>
export default {data() {return {}},created() {},// DOM 渲染完成触发mounted() {// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('main'))// 绘制图表myChart.setOption({title: {text: 'ECharts 入门示例'},tooltip: {},xAxis: {data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']},yAxis: {},series: [{name: '销量',type: 'bar',data: [5, 20, 36, 10, 10, 20]}]});        }
}
</script>

在这里插入图片描述

2. 调用数据

修改官方的线性图示例图代码,修改为线性和柱状混合展示图
https://echarts.apache.org/examples/zh/editor.html?c=data-transform-filter&lang=js

另需准备一个json文件,下载自官网:https://echarts.apache.org/examples/data/asset/data/life-expectancy-table.json
本例中将文件放于根目录,本例中路径为:http://localhost/life-expectancy-table.json

<template><div id="main" style="width: 600px;height:400px;"></div>
</template><script setup>
import * as echarts from 'echarts'
import axios from 'axios'
import { nextTick } from 'vue'
</script><script>
export default {data() {return {}},created() {},// DOM 渲染完成触发mounted() {// 数据来源,注意自行修改var url = 'http://localhost/life-expectancy-table.json';// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('main'))// 每隔三秒发起请求,获取数据并绘制图表nextTick(() => {setInterval(() => {// 执行this.run(url, myChart);}, 3000)})  },methods: {// 执行run (url, obj){// 调用jsonaxios.get(url).then(res => {let option = {dataset: [{id: 'dataset_raw',source: res.data},{id: 'dataset_since_1950_of_germany',fromDatasetId: 'dataset_raw',transform: {type: 'filter',config: {and: [{ dimension: 'Year', gte: 1950 },{ dimension: 'Country', '=': 'Germany' }]}}},{id: 'dataset_since_1950_of_france',fromDatasetId: 'dataset_raw',transform: {type: 'filter',config: {and: [{ dimension: 'Year', gte: 1950 },{ dimension: 'Country', '=': 'France' }]}}}],title: {text: 'Income of Germany and France since 1950'},tooltip: {trigger: 'axis'},xAxis: {type: 'category',nameLocation: 'middle'},yAxis: {name: 'Income'},series: [{type: 'line',datasetId: 'dataset_since_1950_of_germany',showSymbol: false,encode: {x: 'Year',y: 'Income',itemName: 'Year',tooltip: ['Income']}},{type: 'bar',datasetId: 'dataset_since_1950_of_france',showSymbol: false,encode: {x: 'Year',y: 'Income',itemName: 'Year',tooltip: ['Income']}}]};obj.setOption(option);})}     }
}
</script>

展示图
在这里插入图片描述

  • 可以顺便学习一下vue3中 nextTick 的具体用法。

3. 异步调用

还是上面的例子(实现略有不同),setInterval()中原有的run()函数改为了getOpt()函数,主要用来学习axios如何返回值~~
学习:获取axios的return值

<template><div id="main" style="width: 600px;height:400px;"></div>
</template><script setup>
import * as echarts from 'echarts'
import axios from 'axios'
import { nextTick } from 'vue'
</script><script>
export default {data() {return {}},created() {},// DOM 渲染完成触发mounted() {// 数据来源,注意自行修改var url = 'http://localhost/life-expectancy-table.json';// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('main'))// 每隔三秒发起请求,获取数据并绘制图表nextTick(() => {setInterval(() => {// 与上面不同的实现方式this.getOpt(url).then(opt=>{myChart.setOption(opt);});        }, 3000)})  },methods: {// 获取async getOpt (url){let option;// 调用jsonawait axios.get(url).then(res => {option = {dataset: [{id: 'dataset_raw',source: res.data},{id: 'dataset_since_1950_of_germany',fromDatasetId: 'dataset_raw',transform: {type: 'filter',config: {and: [{ dimension: 'Year', gte: 1950 },{ dimension: 'Country', '=': 'Germany' }]}}},{id: 'dataset_since_1950_of_france',fromDatasetId: 'dataset_raw',transform: {type: 'filter',config: {and: [{ dimension: 'Year', gte: 1950 },{ dimension: 'Country', '=': 'France' }]}}}],title: {text: 'Income of Germany and France since 1950'},tooltip: {trigger: 'axis'},xAxis: {type: 'category',nameLocation: 'middle'},yAxis: {name: 'Income'},series: [{type: 'line',datasetId: 'dataset_since_1950_of_germany',showSymbol: false,encode: {x: 'Year',y: 'Income',itemName: 'Year',tooltip: ['Income']}},{type: 'bar',datasetId: 'dataset_since_1950_of_france',showSymbol: false,encode: {x: 'Year',y: 'Income',itemName: 'Year',tooltip: ['Income']}}]};})return option;}     }
}
</script>

4. 多表同时

结合两种不同的图标放在一个页面,其中新增一种表为:
https://echarts.apache.org/examples/zh/editor.html?c=gauge-ring

<template><div id="main" style="width: 600px;height:400px;float:left"></div><div id="sub" style="width: 600px;height:400px;float:left;"></div>
</template><script setup>
import * as echarts from 'echarts'
import axios from 'axios'
import { nextTick } from 'vue'
</script><script>
export default {data() {return {}},created() {},// DOM 渲染完成触发mounted() {// 数据来源,注意自行修改var url = 'http://localhost/life-expectancy-table.json';// 基于准备好的dom,初始化echarts实例var myMain = echarts.init(document.getElementById('main'))var mySub = echarts.init(document.getElementById('sub'))var option;const gaugeData = [{value: 20,name: 'Perfect',title: {offsetCenter: ['0%', '-30%']},detail: {valueAnimation: true,offsetCenter: ['0%', '-20%']}},{value: 40,name: 'Good',title: {offsetCenter: ['0%', '0%']},detail: {valueAnimation: true,offsetCenter: ['0%', '10%']}},{value: 60,name: 'Commonly',title: {offsetCenter: ['0%', '30%']},detail: {valueAnimation: true,offsetCenter: ['0%', '40%']}}];option = {series: [{type: 'gauge',startAngle: 90,endAngle: -270,pointer: {show: false},progress: {show: true,overlap: false,roundCap: true,clip: false,itemStyle: {borderWidth: 1,borderColor: '#464646'}},axisLine: {lineStyle: {width: 40}},splitLine: {show: false,distance: 0,length: 10},axisTick: {show: false},axisLabel: {show: false,distance: 50},data: gaugeData,title: {fontSize: 14},detail: {width: 50,height: 14,fontSize: 14,color: 'inherit',borderColor: 'inherit',borderRadius: 20,borderWidth: 1,formatter: '{value}%'}}]};// 每隔三秒发起请求,获取数据并绘制图表nextTick(() => {setInterval(() => {// main部分this.getOptMain(url).then(opt=>{myMain.setOption(opt);});// sub部分gaugeData[0].value = +(Math.random() * 100).toFixed(2);gaugeData[1].value = +(Math.random() * 100).toFixed(2);gaugeData[2].value = +(Math.random() * 100).toFixed(2);mySub.setOption({series: [{data: gaugeData,pointer: {show: false}}]});}, 3000)})option && mySub.setOption(option);},methods: {// 获取async getOptMain (url){let option;// 调用jsonawait axios.get(url).then(res => {option = {dataset: [{id: 'dataset_raw',source: res.data},{id: 'dataset_since_1950_of_germany',fromDatasetId: 'dataset_raw',transform: {type: 'filter',config: {and: [{ dimension: 'Year', gte: 1950 },{ dimension: 'Country', '=': 'Germany' }]}}},{id: 'dataset_since_1950_of_france',fromDatasetId: 'dataset_raw',transform: {type: 'filter',config: {and: [{ dimension: 'Year', gte: 1950 },{ dimension: 'Country', '=': 'France' }]}}}],title: {text: 'Income of Germany and France since 1950'},tooltip: {trigger: 'axis'},xAxis: {type: 'category',nameLocation: 'middle'},yAxis: {name: 'Income'},series: [{type: 'line',datasetId: 'dataset_since_1950_of_germany',showSymbol: false,encode: {x: 'Year',y: 'Income',itemName: 'Year',tooltip: ['Income']}},{type: 'bar',datasetId: 'dataset_since_1950_of_france',showSymbol: false,encode: {x: 'Year',y: 'Income',itemName: 'Year',tooltip: ['Income']}}]};})return option;}}
}
</script>

在这里插入图片描述

参考:
Vue Element UI 之ECharts图表
Echarts 在vue3x中使用(包括动态数据变化)
优化了三年经验者的Echarts卡顿
关于vue+elementui 访问本地json和跨域访问API问题
Vue3+ElementPlus+Axios实现从后端请求数据并渲染
Vue3中的Methods用法介绍
Vue3中你应该知道的setup!

在这里插入图片描述

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

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

相关文章

记一个JSON返回数据的bug

记一个JSON返回数据的bug:‘Object of type int64 is not JSON serializable’ 我在打包数组进行json数据返回时&#xff0c;有一个参数是numpy数组里计算出来的&#xff0c;类型为int64&#xff0c;直接进行json打包会报错 提示(‘Object of type int64 is not JSON serializa…

【解决】运行vue项目,启动报错 in ./node_modules/@intlify/core-base/dist/core-base.cjs

我的处理方式: 一开始查了好多方法&#xff0c;删除node_modules&#xff0c;重新安装&#xff0c;切换node版本等&#xff0c;但是发现并没有用 之后来发现是安装依赖包的时候有些包安装失败导致的&#xff0c;只要有针对性的重新安装依赖就可以了 例如&#xff1a; in ./n…

C++中常见的头文件

在C中&#xff0c;头文件被广泛使用&#xff0c;用于包含函数声明、常量定义、类定义等。一般情况下&#xff0c;头文件包含在源文件的开头部分&#xff0c;这样源文件就可以访问头文件中定义的内容。 以下是一些常见的C头文件及其功能&#xff1a; <iostream>&#xf…

遇到工厂索赔你是一竿子处理方式吗?

最近听到一个博主说关于客户索赔的事情&#xff0c;说是自己以前的处理方式要么就是将事情推给工厂&#xff0c;以工厂的态度为原则&#xff0c;工厂赔付给我们&#xff0c;然后我们就同意赔付给客户。如果工厂敷衍我们&#xff0c;那么我们就敷衍客户&#xff0c;这样最起码能…

WPS、Excel表格增加一列,序列1到任意大小 / 填充某个范围的数字到列

Excel添加一列递增的数字方法有如下&#xff1a; 一、最常用的&#xff0c;使用鼠标放到右下角下拉增加 1、选中起始框的右下角&#xff0c;直到显示黑色实心十字 2、一直向下拖动 3、成功 这种填充方式是最常用的&#xff0c;100以内都可以轻松瞬间完成 1~100填充 但是如果…

oracle 表空间详解以及配置操作

Oracle 数据库是由若干个表空间构成的。任何数据库对象在存储时都必须存储在某个 表空间中。表空间对应于若干个数据文件&#xff0c;即表空间是由一个或多个数据文件构成的。 1、常用表空间&#xff1a; 系统表空间 (system tablespace) 是每个 Oracle 数据库都必须具备的。…

算法专题:双指针

目录 题目1&#xff1a;移动零 题目2&#xff1a;复写零 题目3&#xff1a;快乐数 题目4&#xff1a;最多水的容器 题目5&#xff1a;有效三角形的个数 题目6&#xff1a;两数之和为s 题目1&#xff1a;移动零 给定一个数组nums&#xff0c;编写一个函数将所有的0移动到数…

各种免费好用的api整理分享

运营商二要素 API &#xff1a;运营商校验此姓名、手机号码是否一致。运营商三要素 API&#xff1a;运营商验证姓名、身份证号码、手机号码是否一致&#xff0c;返回验证结果称。银行卡二要素&#xff1a;检测输入的姓名、银行卡号是否一致&#xff0c;支持全国所有银联卡。银行…

再扩国产化信创版图!朗思科技与中科方德完成产品兼容性互认证

近日&#xff0c;北京朗思智能科技有限公司&#xff08;以下简称“朗思科技”&#xff09;自主研发的数字员工产品与中科方德桌面操作系统完成产品认证。测试结果显示&#xff0c;双方产品完全兼容&#xff0c;整体运行稳定&#xff0c;在功能、性能及兼容性方面表现良好&#…

网络库OKHttp(1)流程+拦截器

序、慢慢来才是最快的方法。 背景 OkHttp 是一套处理 HTTP 网络请求的依赖库&#xff0c;由 Square 公司设计研发并开源&#xff0c;目前可以在 Java 和 Kotlin 中使用。对于 Android App 来说&#xff0c;OkHttp 现在几乎已经占据了所有的网络请求操作。 OKHttp源码官网 版…

Linux系统的特点以及年轻人如何获取第一个Linux系统

由新闻想到的 新闻一&#xff1a;政府机构 5000 万台电脑将替换为国产 Linux &#xff01; 由这个新闻想到的&#xff0c;如果中国的所有个人、企业、政府把电脑系统都换成linux或者是国产操作系统&#xff0c;那将是怎样的一种景象&#xff01;&#xff1f; 新闻二&#xf…

【数之道 05】走进神经网络模型、机器学习的世界

神经网络 神经网络&#xff08;ANN&#xff09;神经网络基础激活函数 神经网络如何通过训练提高预测准确度逆向参数调整法 &#xff08;BackPropagation&#xff09;梯度下降法链式法则增加一层 b站视频连接 神经网络&#xff08;ANN&#xff09; 最简单的例子&#xff0c;视…

django中template中post请求接口csrf问题

$(function () {$.ajaxSetup({headers: { "X-CSRFToken": getCookie("csrftoken") }}); });// 为防止CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;发post请求时需要在cookie中创建随机码 function getCookie(name) {v…

【Linux】从零开始学习Linux基本指令(二)

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;Linux入门 &#x1f525;该文章主要了解Linux操作系统下的基本指令。 ⚡️上一篇可以看这里 &#x1f449;【Linux】从零开始学习Linux基本指…

【数据结构】排序算法的稳定性分析

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

网络库OKHTTP(2)面试题

序、慢慢来才是最快的方法。 背景 OkHttp 是一套处理 HTTP 网络请求的依赖库&#xff0c;由 Square 公司设计研发并开源&#xff0c;目前可以在 Java 和 Kotlin 中使用。对于 Android App 来说&#xff0c;OkHttp 现在几乎已经占据了所有的网络请求操作。 OKHttp源码官网 问1…

Python Connect SQLServer 2008

Macos&#xff08;经过了两天&#xff0c;无数次的方法验证&#xff0c;寻找各种资料&#xff0c;总结如下&#xff09; brew install freetds0.91 如果出现错误就进行手工安装&#xff0c;也可以直接使用 brew install freetds安装最新版本&#xff08;测试通过&#xff09; …

kubernetes 多集群管理和联邦集群将是下一波运维浪潮

问题 调研一下国内外K8s平台软件&#xff0c;哪个具有创建标准的K8s集群的功能&#xff1f; 背景 随着云原生技术在越来越多的企业和组织中的大规模落地&#xff0c;如何高效、可靠地管理大规模资源池以应对不断增长的业务挑战成为了当下云原生技术的关键挑战。在过去的很长…

【后端】韩顺平Java学习笔记(基础篇01)

因为之前有c基础&#xff0c;所以差不多一样的就简写了owo 来源&#xff1a;韩顺平 零基础30天学会Java 目录 I. 控制结构&#xff08;简&#xff09; 一、介绍 1. 顺序 → 从上到下执行&#xff0c;无跳转 2. 分支 → 单、双、多、嵌套 1&#xff09;单&#xff0c;即…

利用爬虫采集音频信息完整代码示例

以下是一个使用WWW::RobotRules和duoip.cn/get_proxy的Perl下载器程序&#xff1a; #!/usr/bin/perluse strict; use warnings; use WWW::RobotRules; use LWP::UserAgent; use HTTP::Request; use HTTP::Response;# 创建一个UserAgent对象 my $ua LWP::UserAgent->new();#…