vue中使用echarts实现动态数据绑定、获取后端接口数据

这篇具有很好参考价值的文章主要介绍了vue中使用echarts实现动态数据绑定、获取后端接口数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前几篇echarts的文章是实现了静态的柱状图、折线图、饼状图、地图,在项目中我们肯定是需要获取后端接口,将后端返回的数据显示在图表上,所以这次就记录一下如何实现echarts的动态数据绑定。

简单来讲,就是从接口获取到的数据,需要在图表的方法里再次定义一下,然后用setOption方法就可以获取到了。

1.柱状图

首先看接口传过来的数据,传过来一个数组,第一条年度2021,数量1,第二条年度2022,数量3

vue中使用echarts实现动态数据绑定、获取后端接口数据

因为柱状图的数据有两个,横坐标和纵坐标,所以我们将传来的数据,横坐标做一个数组,纵坐标做一个数组。

首先在data中定义

lwData: {}, // 论文数据
lwndArr: [], // 年度数组
lwtsArr: [], // 论文发表天数数组

接着获取接口数据,把接口数据处理一下放进两个数组里。年度为横坐标,将data中传来的年度循环放入年度数组。天数为纵坐标,将data中传来的天数循环放入天数数组。

this.axios.post(this.counturl, {
  type:'paper'
}).then(res => {
  if (res.result === '00000') {
    this.lwData = res.data
    for(let i=0;i<this.lwData.length; i++) {
      this.lwndArr[i] = this.lwData[i].nd
    }
    for(let i=0;i<this.lwData.length; i++) {
      this.lwtsArr[i] = this.lwData[i].count
    }
    lwndArr = this.lwndArr
    lwtsArr = this.lwtsArr
  } else {
      this.$Message.error(res.data.information)
    }
})

echarts和别的获取接口数据不一样的地方,在于echarts中需要再次定义一下数组,然后把接口获取到的数据放进去,不能直接引用this里的数据。

在获取echarts图表的方法里,定义横纵坐标的两个data,然后使用setOption方法,引用定义的data,就可以显示出接口里的数据了。(不再需要const option)

// 论文发表天数柱状图
getLwBar () {
  let lwndArr = []
  let lwtsArr = []
  const lwBar = echarts.init(document.getElementById('lwBar'))// 图标初始化
    this.axios.post(this.counturl, {
      type:'paper'
    }).then(res => {
      if (res.result === '00000') {
        this.lwData = res.data
        for(let i=0;i<this.lwData.length; i++) {
          this.lwndArr[i] = this.lwData[i].nd
        }
        for(let i=0;i<this.lwData.length; i++) {
          this.lwtsArr[i] = this.lwData[i].count
        }
        lwndArr = this.lwndArr
        lwtsArr = this.lwtsArr
        lwBar.setOption({
          title: {
            text: '论文发表天数柱状图'
          },
          tooltip: {
          },
          legend: {
            data: ['论文发表天数']
          },
          xAxis:{
            name: '年份',
            data:lwndArr
          },
          yAxis:{
            name:'论文发表天数',
            type:'value'
          },
          series:[
            {
              name: '论文发表天数',
              type: 'bar', // 类型为柱状图
              data: lwtsArr,
              barWidth: '20%', // 柱条宽度 每个柱条的宽度就是类目宽度的 20%
              // 柱子的样式
              itemStyle: {
                color: '#5574c2'
              }
            }
          ]
        })
        } else {
          this.$Message.error(res.data.information)
        }
      })
      // 随着屏幕大小调节图表
      window.addEventListener('resize', () => {
        lwBar.resize()
      })
   },

效果:

vue中使用echarts实现动态数据绑定、获取后端接口数据

2.折线图 

 折线图和柱状图一样,需要把横坐标和纵坐标分开。

首先在data中定义

zzData: {}, // 著作数据
zzndArr: [], // 著作年度数组
zzslArr: [], // 著作出版数量数组

接着获取接口数据,setOption

// 著作折线图
getZzLine () {
  let zzndArr = []
  let zzslArr = []
  const zzLine = echarts.init(document.getElementById('zzLine'))// 图标初始化
  this.axios.post(this.counturl, {
    type:'book'
  }).then(res => {
    if (res.result === '00000') {
      this.zzData = res.data
      for(let i=0;i<this.zzData.length; i++) {
        this.zzndArr[i] = this.zzData[i].nd
      }
      for(let i=0;i<this.zzData.length; i++) {
        this.zzslArr[i] = this.zzData[i].count
      }
      zzndArr = this.zzndArr
      zzslArr = this.zzslArr
      zzLine.setOption({
      title: {
        text: '著作出版数量折线图'
      },
      tooltip: {
        trigger: 'axis'   // axis   item   none三个值
      },
      legend: {
        data: ['著作']
      },
      xAxis:{
        name: '年份',
        data:zzndArr
      },
      yAxis:{
        name:'数量',
        type:'value'
      },
      series:[
        {
          name: '著作出版数量',
          type: 'line', // 类型为z折线图
          data: zzslArr,
          type: 'line',
          stack: 'x',
          itemStyle: {
            color: '#ef6567',
            width: 4
          }
        }
      ]
    })
  } else {
    this.$Message.error(res.data.information)
  }
})
// 随着屏幕大小调节图表
window.addEventListener('resize', () => {
  zzLine.resize()
})
},

效果:

vue中使用echarts实现动态数据绑定、获取后端接口数据

3.饼状图 

饼状图和柱状、折线图的区别在于,饼状图只需要获取一个数据,数据格式如下:

data: [
  {
     value: 335,
     name: '初级会计师'
  },
{
     value: 200,
     name: '中级会计师'
  },
]

所以我们只需要后端传过来的数据也是这样的就可以了,要注意在图表方法中再定义一次 。

接口数据:

vue中使用echarts实现动态数据绑定、获取后端接口数据

除此之外,饼状图还有一个表头数据很重要,因为它有很多个表头数据,所以不能和柱状、折线

一样直接定义,也需要从接口获取一下,所以我们先在data中定义这两个数据。

scaleData: [], // 饼状图数据
scaleLegend: [], // 饼状图标注

 接着获取接口,把对应的数据获取到,使用setOption

// 毕业人数
      getPieEcharts () {
        let scaleData= []
        let scaleLegend = []
        const kjjgPie = echarts.init(document.getElementById('kjjgPie'))// 图标初始化
        this.axios.post(this.scaleurl, {
          type:this.selectedScale
        }).then(res => {
          if (res.result === '00000') {
            this.scaleData = res.data
            scaleData = this.scaleData
            for(let i = 0; i<res.data.length; i++) {
              this.scaleLegend[i] = res.data[i].name
            }
            scaleLegend = this.scaleLegend
            kjjgPie.setOption({
              legend: {
                data: scaleLegend
              },
              tooltip: {},
              color:['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'],
              series: [
                {
                  radius: '50%',
                  // name: '毕业人数',
                  type: 'pie', // 类型为柱状图
                  label: {
                    //echarts饼图内部显示百分比设置
                    show: true,
                    position: "outside", //outside 外部显示  inside 内部显示
                    formatter: '{b}({d}%)',
                  },
                  data: scaleData
                }
              ]
            })
          } else {
            this.$Message.error(res.data.information)
          }
        })
        // 随着屏幕大小调节图表
        window.addEventListener('resize', () => {
          kjjgPie.resize()
        })
      },

效果:

vue中使用echarts实现动态数据绑定、获取后端接口数据

这里右上角有一个选择框,可以根据选择的数据,显示对应的饼状图。

在这里可以简单提一下,首先是select选择框:

<Select  v-model="selectedScale"  style="display:inline-block;width:200px;float:right;margin-right:10px;" @on-change="scaleChange">
  <Option v-for="item in selectList.scale" :value="item.code" :key="item.code" placeholder="请选择">
  {{ item.name }}
  </Option>
</Select>

 在data中定义默认的数据:

selectedScale: 'zyzg', // 被选择的饼状图类别

用select选择框的on-change事件,当选项改变时,将改变的value传给定义的selectedScale,接口会根据selectedScale的内容,返回不一样的数据。

scaleChange(value) {
  this.selectedScale = value
  this.getPieEcharts()
},

4.地图 

 地图的具体内容可以看之前两篇地图的文章。需求是鼠标放在某一个地区,要显示对应的内容,新增的需求是要提供多个散点,还有个全省的数据。

地图和饼状图一样,可以要求后端按照规定的格式传过来,会方便很多,散点图的数据就获取对应的几条就可以了。

传过来的接口数据:

vue中使用echarts实现动态数据绑定、获取后端接口数据

data中定义:

profileData: [], // 地图数据
sdData: [], // 散点数据
qsljnumber: '', // 全省领军人数
qslwnumber: '', // 全省论文数量
qszznumber: '', // 全省著作数量

接口数据:

initCharts () {
        const charts = echarts.init(this.$refs['charts'])
        let airData = []
        let currentSdData = []
        this.axios.post(this.profileurl, {
        }).then(res => {
          if (res.result === '00000') {
            this.profileData = res.data
            airData=this.profileData
            this.sdData[0] = res.data[0]
            this.sdData[1] = res.data[14]
            this.sdData[2] = res.data[15]
            this.sdData[3] = res.data[16]
            currentSdData = this.sdData
            this.qsljnumber = res.data[17].text.ljnumber
            this.qslwnumber = res.data[17].text.lwnumber
            this.qszznumber = res.data[17].text.zznumber
            charts.setOption({
              series:[
                {
                  type: 'map',
                  data:airData
                },
                {
                  type: 'effectScatter',
                  data:currentSdData
                }
              ]
            })
          } else {
            this.$Message.error(res.data.information)
          }
        })
        const option = {
          // 背景颜色
          backgroundColor: 'white',
          // 提示浮窗样式
          tooltip: {
            show: true,
            trigger: 'item',
            alwaysShowContent: false,
            backgroundColor: '#0C121C',
            borderColor: 'rgba(0, 0, 0, 0.16);',
            hideDelay: 100,
            triggerOn: 'mousemove',
            enterable: true,
            textStyle: {
              color: '#DADADA',
              fontSize: '12',
              width: 20,
              height: 30,
              overflow: 'break'
            },
            formatter (params) {
              console.log(params)
              return `地区:${params.data.name}</br>领军人数:${params.data.text.ljnumber}</br>论文数量:${params.data.text.lwnumber}</br>著作数量:${params.data.text.zznumber}`
            },
            showDelay: 100
          },
          // 地图配置
          geo: {
            map: 'jiangsu',
            // 地图文字
            label: {
              // 通常状态下的样式
              normal: {
                // 默认是否显示地区名称
                show: true,
                textStyle: {
                  color: 'black'
                }
              },
              // 鼠标放上去的样式
              emphasis: {
                textStyle: {
                  color: 'black'
                }
              }
            },
            // 地图区域的样式设置
            itemStyle: {
              normal: {
                // 地图边界颜色
                borderColor: '#fff',
                // 地图区域背景颜色
                areaColor: '#AAD5FF',
              },
              // 鼠标放上去高亮的样式
              emphasis: {
                // 鼠标放上去地图区域背景颜色
                areaColor: '#0057da',
                borderWidth: 0
              }
            }
          },
          series: [
            {
              data: airData,
              geoIndex: 0,  
              type:'map'
            },
            {
              type: 'effectScatter',
              coordinateSystem: 'geo',
              effectType: 'ripple',
              showEffectOn: 'render',
              rippleEffect: {
                period: 1,
                scale: 2,
                brushType: 'fill'
              },
              symbolSize: [15, 15],
              // 这里渲染标志里的内容以及样式
              tooltip: {
                show: true,
                formatter (value) {
                  return `地区:${value.data.name}</br>领军人数:${value.data.text.ljnumber}</br>论文数量:${value.data.text.lwnumber}</br>著作数量:${value.data.text.zznumber}`
                },
                color: '#fff'
              },
              hoverAnimation: true,
              // 标志的样式
              itemStyle: {
                normal: {
                  color: 'rgba(255, 235, 59, .7)',
                  shadowBlur: 10,
                  shadowColor: '#333'
                }
              },
              zlevel: 1,
              data: currentSdData
            }
          ],
          // 视觉映射组件
          visualMap:{
            min:1,
            max:300,
            inRange:{
              color:['#e0ffff', '#006edd']
            },
            calculable: true //出现滑块
          }
        }
        // 地图注册,第一个参数的名字必须和option.geo.map一致
        echarts.registerMap('jiangsu', zhongguo)

        charts.setOption(option)
      },

效果:

vue中使用echarts实现动态数据绑定、获取后端接口数据

关于之前写的静态图表的文章链接:

vue中使用echart绘制柱状图、折现图、饼状图_芝士焗红薯的博客-CSDN博客_echart饼状图

关于之前写的自定义地图样式的文章链接:

vue中使用echarts实现地图自定义浮窗内容及样式_芝士焗红薯的博客-CSDN博客_echarts 地图自定义样式

vue中使用echarts实现地图颜色渐变及自定义浮窗内容_芝士焗红薯的博客-CSDN博客_echarts 地图整体渐变色

vue中使用echarts实现地图散点图_芝士焗红薯的博客-CSDN博客_echarts实时更新散点图文章来源地址https://www.toymoban.com/news/detail-420393.html

到了这里,关于vue中使用echarts实现动态数据绑定、获取后端接口数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【vue3】数据绑定,动态渲染class与style

    数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式(style)。因为 class 和 style 都是 attribute,我们可以和其他 attribute 一样使用 v-bind 将它们和动态的字符串绑定。但是,在处理比较 复杂的绑定 时,通过拼接生成字符串是麻烦且易出错的。因此,Vue 专门为

    2024年02月13日
    浏览(26)
  • vue、uniapp中动态添加绑定style、class 9种方法实现

    直接使用静态class和style属性: 使用场景:当class和style属性是固定不变的时候,可以直接在模板中写死。 优点:简单直接,没有额外的计算和逻辑。 缺点:无法根据条件动态修改class和style。 使用v-bind动态绑定class和style属性: 使用场景:当class和style属性需要根据组件的da

    2024年02月10日
    浏览(40)
  • 前端实现vue3使用axios调用后端接口

    作用是: 抛出基础请求方式、基础前缀、请求头信息、参数、超时时间、凭证、后端接口返回数据类型! 作用是:使用请求拦截器和响应拦截器解决下边的问题 从浏览器中创建 XMLHttpRequests 从 node.js 创建 http 请求 支持 Promise API 拦截请求和响应 转换请求数据和响应数据 取消

    2024年01月20日
    浏览(35)
  • Vue3中动态绑定:disabled element-plus使用方法

    @change=\\\"whetherFlag($event)\\\"  根据value值判断是否禁用 :disabled=\\\"isShow\\\" 初始值为禁用状态 const isShow = refboolean(true);  根据value的值判断是否禁用  

    2024年01月25日
    浏览(41)
  • vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果

    一、实现效果 使用echarts实现省市地图绘制,你也可以绘制全国地图。 根据数据在地图显示柱状图,根据经纬度实现定位。 根据数据显示数据,涟漪动态效果。 当然你也可以根据你自己的需求,增删效果哦。 二、实现方法 1、安装echarts插件 2、获取省市json数据 https://datav.

    2024年02月03日
    浏览(34)
  • 微信小程序使用echarts动态加载数据

    官网地址 GitHub - ecomfe/echarts-for-weixin: Apache ECharts 的微信小程序版本  将官网代码下载到本地,并进行解压,可以运行一下查看示例代码 将图示中的文件夹复制粘贴到小程序相应位置,建议放在components文件夹中  json文件,路径要与文件的位置保持一致  wxml文件,给ec-canvas一

    2024年04月12日
    浏览(27)
  • 获取街道、乡镇级的地图geoJson数据,使用echarts绘制地图

    在此以泰州靖江市为例为例,记录一下实现过程 1、整体完成后实现的效果如下 2、获取数据 (1) DataV.GeoAtlas 第一个能想到的获取数据的网站就是它, 是阿里推出的一个用于获取全国、各省、各市以及个县级市详细地图信息的json文件 http://datav.aliyun.com/portal/school/atlas/area_s

    2024年02月09日
    浏览(25)
  • Vue使用WebSocket实现实时获取后端推送的数据。

    Vue可以使用WebSocket实现实时获取后端推送的数据。 1.在Vue项目中安装WebSocket库 可以使用npm或yarn安装WebSocket库: 2.创建WebSocket连接 在Vue组件中创建WebSocket连接,连接到后端WebSocket服务器,代码如下: 上面的代码中,使用WebSocket连接到后端WebSocket服务器,通过监听onmessage事件,

    2024年02月08日
    浏览(39)
  • 使用 Vue 3.0 和 Element UI 实现编辑功能、按钮操作和与后端接口交互的详解

    简介: Vue 3.0 和 Element UI 是当前流行的前端开发工具,结合它们可以轻松构建出强大的用户界面。本篇技术博客将详细介绍如何利用 Vue 3.0 和 Element UI 实现编辑功能、按钮操作以及与后端接口进行交互的具体步骤和技巧。 首先,确保已经正确安装了 Vue 3.0 和 Element UI。你可以

    2024年02月07日
    浏览(37)
  • 关于微信小程序中如何实现数据可视化-echarts动态渲染

    移动端设备中,难免会涉及到数据的可视化展示、数据统计等等,本篇主要讲解原生微信小程序中嵌入 echarts 并进行动态渲染,实现数据可视化功能。 基础使用 首先在 GitHub 上下载 echarts 包 地址:https://github.com/ecomfe/echarts-for-weixin/tree/master 下载项目 解压压缩包,将 ec-canva

    2024年01月25日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包