echart的数据渲染,option不刷新问题

这篇具有很好参考价值的文章主要介绍了echart的数据渲染,option不刷新问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

echart的数据渲染问题及常见的图例样式修改:

echarts更新数据不重新渲染,echarts,前端,javascript

我们的项目是wrj有关的项目,数据要求做到实时获取。包括红圈住的echart图标的数据,还有就是民用及警用tab切换的时候数据也需要刷新。


问题描述

例如:我先前以为是我的切换时没有调用echart图标数据的接口,一路log看接口是调了,但是数据还是没刷新,手动浏览器刷新才正常。最后我发现页面首次加载的时候,数据根本就没更新到最新的接口数据,还取得是data里面的数据。


原因分析:

我猜想的原因是,因为echart图标已经在和dom渲染的时候一起渲染了,数据自然就取得data里面的数据。就算接口返回把option的数据替换,他也不会自动渲染到图表中。


解决方案:

数据自动刷新,必然需要一个监听机制告诉Echarts重新设置数据

    computed:{
    option(){
      let data = this.dataList;
      return {
        intervalId:null,
        legend: {
          // selectedMode: false, //取消图例上的点击事件
          top: 0,
          right: -5,
          orient: 'vertical',
          height:'84px',//图例组件的高度
          textStyle:{
            color:'#fff',
          },
          itemHeight: 12,
          itemWidth: 12,//图例标记的图形高度
          itemGap:8,//图例每项之间的间隔
          myChart:null,
          data: [
           {
                name:'任务中',
                // icon:`image://${imgUrl}`,//格式为'image://+icon文件地址',其中image::后的//不能省略
                icon:`image://${require('@/assets/img/echart/rwing.png')}` //格式为'image://+icon文件地址',其中image::后的//不能省略
            },
            {
                name:'已完成',
                icon:`image://${require('@/assets/img/echart/rwed.png')}`
            },
            {
                name:'未开始',
                icon:`image://${require('@/assets/img/echart/rwwks.png')}`
            },
            {
                name:'任务异常',
                icon:`image://${require('@/assets/img/echart/rwyc.png')}`
            }
          ],
          formatter: function (name) {
            let str;
            for (let i=0;i<data.length;i++){
              if (data[i].name==name){
                str = name + ' ' + data[i].value
              }
            }
            return str
          }
        },
        series: [
          {
            name: 'Access From',
            type: 'pie',
            center:['35%','50%'],
            radius: ['60%', '90%'],
            avoidLabelOverlap: false,
            hoverAnimation: false,
            label: {
              show: false,
              position: 'center'
            },
            labelLine: {
              show: false
            },
            data: this.dataList
          }
        ]
      }
    }
  },

data中定义最初始的值

  data() {
    return {
      dataList:[
        { value: 0, name: '未开始' },
        { value: 0, name: '已完成' },
        { value: 0, name: '任务中' },
        { value: 0, name: '任务异常' },
      ],
    };
  },

渲染是在切换tab的时候来渲染echart,watch监控tab项渲染

  watch:{
    titleValue(val){
      if (val=='2'){
        setTimeout(()=>{
          this.initEchart()
        },100)
      }
    },
    //观察option的变化
    option: {
    //**解决不渲染的重点**
      handler(newVal, oldVal) {
        //数据自动刷新,必然需要一个监听机制告诉Echarts重新设置数据
        if (this.myChart) {
          if (newVal) {
            this.myChart.setOption(newVal);
          } else {
            this.myChart.setOption(oldVal);
          }
        } else {
          this.initEchart();
        }
      },
      deep: true //对象内部属性的监听,关键。
    }
  },

methods及html中

//html
 <div class="t3" id="t3"></div>
 
 methods: {
 //初始化图表
    initEchart(){
      this.myChart = this.$echarts.init(document.getElementById('t3'));
      this.myChart.setOption(this.option);
    },
}

关于echart的option的补充说明:
① legend的图标替换如下面的data中定义的,可以用’image://url’ ,引入外部的图标。
图例之间的间距及宽度都可以调整

itemWidth: 12,//图例标记的图形高度
 itemGap:8,//图例每项之间的间隔

②图例的字体颜色,一般都是如下

 legend: {
      textStyle:{
        color:'#fff',
      },
    },

这样设置的就是图例的字体整体颜色,我们有个需求就是,图例名称是统一的颜色,但是图例数据需要多种颜色的配置,
在lengend 中通过formmatter函数配合textStyle中的属性rich富文本来格式化处理样式或者内容等

 legend: {
  textStyle:{
      color:'#fff',
       rich: {
         rwing: {
            color: '#3ADCAB',
          },
          rwed: {
            color: '#1DD6FF',
          },
          rwwks: {
            color: '#FFAD32',
          },
          rwyc: {
            color: '#EC7C83',
          },
        }
    },
 },
 formatter: function (name,id) {
     let str,temp;
     for (let i=0;i<data.length;i++){
       if (data[i].name==name){
         // str = name + ' ' + data[i].value
         str=data[i].value
       }
     }
     // return str
     if (name=='任务中') {
       temp="{name|" +name +"} {rwing|"+str+"}"
     }else if(name=='已完成'){
       temp="{name|" +name +"} {rwed|"+str+"}"
     }else if(name=='未开始'){
       temp="{name|" +name +"} {rwwks|"+str+"}"
     }else if(name=='任务异常'){
       temp="{name|" +name +"} {rwyc|"+str+"}"
     }
     return temp
   }

设置完之后的页面就如一一一对应
echarts更新数据不重新渲染,echarts,前端,javascript
option完整代码

 option(){
      let data = this.dataList;
      return {
        legend: {
          // selectedMode: false, //取消图例上的点击事件
          top: 0,
          right: -5,
          orient: 'vertical',
          height:'84px',//图例组件的高度
          textStyle:{
            color:'#fff',
            rich: {
              rwing: {
                color: '#3ADCAB',
              },
              rwed: {
                color: '#1DD6FF',
              },
              rwwks: {
                color: '#FFAD32',
              },
              rwyc: {
                color: '#EC7C83',
              },
            }
          },
          itemHeight: 12,
          itemWidth: 12,//图例标记的图形高度(可根据icon的大小设置)
          itemGap:8,//图例每项之间的间隔
          myChart:null,
          data: [
            {
                name:'任务中',
                // icon:`image://${imgUrl}`,//格式为'image://+icon文件地址',其中image::后的//不能省略
                icon:`image://${require('@/assets/img/echart/rwing.png')}` //格式为'image://+icon文件地址',其中image::后的//不能省略
            },
            {
                name:'已完成',
                icon:`image://${require('@/assets/img/echart/rwed.png')}`
            },
            {
                name:'未开始',
                icon:`image://${require('@/assets/img/echart/rwwks.png')}`
            },
            {
                name:'任务异常',
                icon:`image://${require('@/assets/img/echart/rwyc.png')}`
            }
          ],
          formatter: function (name,id) {
            let str,temp;
            for (let i=0;i<data.length;i++){
              if (data[i].name==name){
                // str = name + ' ' + data[i].value
                str=data[i].value
              }
            }
            // return str
            if (name=='任务中') {
              temp="{name|" +name +"} {rwing|"+str+"}"
            }else if(name=='已完成'){
              temp="{name|" +name +"} {rwed|"+str+"}"
            }else if(name=='未开始'){
              temp="{name|" +name +"} {rwwks|"+str+"}"
            }else if(name=='任务异常'){
              temp="{name|" +name +"} {rwyc|"+str+"}"
            }
            return temp
          }
        },
        series: [
          {
            name: 'Access From',
            type: 'pie',
            center:['35%','50%'],
            radius: ['60%', '90%'],
            avoidLabelOverlap: false,
            hoverAnimation: false,
            label: {
              show: false,
              position: 'center'
            },
            labelLine: {
              show: false
            },
            data: this.dataList,
            color:  ['#FFAD32', '#1DD6FF','#3ADCAB','#EC7C83',],
          }
        ]
      }
    }

对于图例字体颜色的设置还有一种方式就是,假如图例有一项是固定的,如下图
echarts更新数据不重新渲染,echarts,前端,javascript
这样的就可以,在lengend 中配置data属性,data里面定义各图例的文本,以及该文本对应的样式文章来源地址https://www.toymoban.com/news/detail-756025.html

到了这里,关于echart的数据渲染,option不刷新问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • vue-echarts踩坑,本地开发可以渲染echarts图表,线上环境图表渲染不出来

    main.js 全局注册v-chart组件 在页面中使用 如上图,我开始写的静态数据,在data中定义了chartOption1:{…配置项…}, 在接口数据返回之后,更新了配置项,在本地开发环境可以正常渲染。但是线上环境出不来,也不报错,接口数据一切正常。 解决办法: 无奈最后没有使用‘vue-e

    2024年01月18日
    浏览(51)
  • Echarts实现动态折线图的定时刷新

    在做项目的过程中,遇到一个需求:要从后台读取数据,并对echarts进行实时更新。先来看下实现的效果图: 首先来看一下没有和后台交互的echarts动态折线图如何实现,代码如下: 前面实现的是动态折现图并没有和后台交互,接下来看一下和后台交互的代码是如何实现的:

    2024年02月12日
    浏览(43)
  • vue+echarts 实现地图tooltip点击事件;toolTip数据动态渲染;同时鼠标滑过涟漪点时实现地图多区域联动

    最终做出来的效果是这样的: 最近做项目时,遇到这样的需求:         1、toolTip上的数据根据后台动态渲染         2、鼠标移入地图涟漪点时显示tootTip,点击toolTip上的文字,携带动态数据id进行路由跳转         3、鼠标移入地图涟漪点,与涟漪点相关的省份多区域联动

    2024年02月09日
    浏览(55)
  • 微信小程序使用Echarts-for-weixin实现图表动态更新数据、懒加载(干货满满!!!)

    后端开发入坑全栈之 微信小程序 + Echarts图表 上需求,如下: Apache Echarts是一个基于JavaScript的开源可视化图表库,用于创建各种类型图表,常用图表类型有柱状图、折线图、饼状图、散点图等等。废话不多说,直接上干货!耶✌ 1、下载Echart-for-weixin项目 echart-for-weixin 项目提

    2024年02月04日
    浏览(47)
  • echarts动态渲染柱状图背景颜色以及顶部数值

     众所周知 柱状图的背景色在series下的 itemStyle 的color下修改  不同数据让每个柱状图背景颜色不同  这个时候就需要自定义  所以我在color后跟了一个箭头函数  里面的参数params跟formatter里的是一样的  可以打印出来 看下里面有什么值  我打印了一下  所以这个时候就可以根

    2024年02月04日
    浏览(47)
  • 动态渲染 echarts 饼图(vue 2 + axios + Springboot)

    因为上文中提到的需求就是在 vue2 里面绘制echarts,所以,这里就搭建一个 vue2 的脚手架了。 想要深入了解 echarts 属性,请到此篇文章: 如何用echarts画一个好看的饼图 至于如何在 vue2 中使用 echarts,请见这篇文章:https://blog.csdn.net/m0_54355172/article/details/131960527 先搭建一个 v

    2024年02月09日
    浏览(37)
  • 【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)

    微信小程序中使用 echarts 需使用官方提供的 ec-canvas 组件 点击下方链接,下载 ec-canvas 组件 https://gitcode.net/mirrors/ecomfe/echarts-for-weixin/-/tree/master 将其中的 ec-canvas 文件夹拷贝到微信小程序的分包中 ( 因 ec-canvas 组件较大,约 1M,若放在主包中很容易超出 2M 的大小限制,不了解

    2024年02月09日
    浏览(55)
  • echarts写3d圆环,并解决圆环数据相同时显示异常问题

    “echarts”: “^4.9.0”, “echarts-gl”: “^1.1.2”, 1.mixins.js文件: 2.pieChart.vue文件: netDefenseSituList:为传入的数据

    2024年02月03日
    浏览(43)
  • 解决echarts配置滚动(dataZoom)后导出图片数据不全问题

    先展现一个echarts,并配置dataZoom,每页最多10条数据,超出滚动 效果: 调用echarts中getDataURL获取图表的数据 URL 问题来了:如数据不分页则可以下载全数据,如数据分页了则只能下载出可视区内容,如何解决? 解决思路:echarts最终生成了canvas,canvas的宽高就是当前可视区的宽

    2024年01月19日
    浏览(44)
  • 关于uniapp打包成app echart数据不显示的 renderjs问题

    renderjs是一个运行在视图层的js。它比WXS更加强大。它只支持app-vue和h5。 renderjs的主要作用有2个: 1、大幅降低逻辑层和视图层的通讯损耗,提供高性能视图交互能力 2、在视图层操作dom,运行for web的js库 就是vue本身不支持直接通过原生JS操作DOM,于是在uniapp里,可以通过ren

    2024年02月15日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包