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

news/2024/7/10 2:46:07 标签: 前端, ui, echarts, javascript, vue, vue3, elementui
  • 前端数据展示(数据可视化、数据大屏等)可使用的工具比较多,很多第三方都提供了在线平台,比如阿里云,只需数据接口,在线配置一下界面即可使用。

    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官网打开较慢,可尝试翻越。

在这里插入图片描述

安装

javascript">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>javascript">
import * as echarts from 'echarts'
</script>

<script>javascript">
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>javascript">
import * as echarts from 'echarts'
import axios from 'axios'
import { nextTick } from 'vue'
</script>

<script>javascript">
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){
      // 调用json
      axios.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>javascript">
import * as echarts from 'echarts'
import axios from 'axios'
import { nextTick } from 'vue'
</script>

<script>javascript">
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;
      // 调用json
      await 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中使用(包括动态数据变化)
关于vue+elementui 访问本地json和跨域访问API问题
Vue3+ElementPlus+Axios实现从后端请求数据并渲染
Vue3中的Methods用法介绍
Vue3中你应该知道的setup!


http://www.niftyadmin.cn/n/5100622.html

相关文章

视频SDK,高效视频解决方案

随着企业业务的不断扩展和多样化&#xff0c;视频已成为企业宣传、教育和娱乐等多个领域不可或缺的内容。为了满足企业对视频的需求&#xff0c;美摄视频SDK开发应运而生&#xff0c;为企业提供全面、高效、安全和便捷的视频解决方案。 美摄视频SDK开发公司拥有丰富的经验和卓…

springBoot--web开发--WebMvcAutoConfiguration原理

WebMvcAutoConfiguration原理 自动配置类的生效条件hiddenHttpMethodFilter和formContentFilter的作用WebMvcConfigurer的作用 自动配置类的生效条件 点击ctarln 搜索类WebMvcAutoConfiguration hiddenHttpMethodFilter和formContentFilter的作用 hiddenHttpMethodFilter&am…

IDE常用快捷键整理及使用指南

IDE常用快捷键整理 CtrlShiftBackspace 光标定位到上次修改的地方 CtrlY 删除当前行 CtrlAltL 格式化代码 使用指南

【微信小程序】自定义组件布局会议OA其他页面(附源码)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《微信小程序开发实战》。&#x1f3af;&#x1f3a…

英语作桥梁文化传世界 学好英语传承中华传统文化

中华文化博大精深,源远流长,蕴藏着中华民族深刻的智慧。前有儒家思想讲仁爱,重民本,尚和合,确立了中华千年的社会秩序;后有民族精神自强不息,风雨同舟,形成了民族共同的精神火炬,引领中华民族实现伟大复兴。 盘桓600余年的故宫,见证了明清王朝的兴衰成败;蜿蜒20000余公里的长城…

如何借助边缘智能网关打造智慧城市便民驿站

智慧城市驿站是一类提供多样化便利服务的新型智能公共设施&#xff0c;通过融合物联网技术、边缘智能技术、新能源技术等&#xff0c;为城市居民整合提供休闲、购物、卫生、广告、安全等公共服务&#xff0c;进一步提升日常生活体验。本篇就为大家介绍如何基于边缘智能网关&…

ftp文件上传缓慢问题

问题描述 某环境下&#xff0c;通过vsftp上传文件缓慢。 问题分析 这个问题是由于服务器DNS导致&#xff0c;如果在内网机器中&#xff0c;配置了公网的DNS或者其他不能链接的DNS&#xff0c;会导致上传缓慢。 解决方案 目前有两种解决方式&#xff0c;任选其一即可&#…

Ubuntu18.04安装QGC报错 `GLIBC_2.29‘ not found

按照官网教程&#xff0c;最后运行时出错。 /tmp/.mount_QGroun2NOhPP/QGroundControl: /lib/x86_64-linux-gnu/libm.so.6: version GLIBC_2.29 not found (required by /tmp/.mount_QGroun2NOhPP/QGroundControl) /tmp/.mount_QGroun2NOhPP/QGroundControl: /usr/lib/x86_64-…