首页 > 其他分享 >vue+Echarts动态数据已经赋值,但是无法渲染页面的问题

vue+Echarts动态数据已经赋值,但是无法渲染页面的问题

时间:2023-01-03 15:46:26浏览次数:62  
标签:vue option 数据 color true show 动态数据 data Echarts

vue+Echarts动态数据已经赋值,但是无法渲染页面的问题

正常的给个div的大小

 <div>
    <div id="echartss" :style="{width: '100%', height: '600px'}"></div>
  </div>

 接下来是option部分:

 echarts1_option:{
            backgroundColor: '#45515a', //背景颜色
            //标题
            title: {
              text: '订单中保险公司所占的比例',
              subtext: '饼图示例',
              left: 'center',
              top: 20,
              textStyle: {
                color: '#ccc',
                fontStyle: 'italic'//标题字体
              }
            },
            //弹窗,响应鼠标指向,显示具体细节
            tooltip : {
              trigger: 'item',//以具体项目触发弹窗
              formatter: "{a} <br/>{b} : {c} ({d}%)",
            },
            //图例,选择要显示的项目
            legend:{
              orient:'vertical',
              left:'left',
              textStyle:{
                color:'#c8c8d0'
              },
              data:['安心','安盛天平','中华联合保险','中国太平洋保险','中国人保财险','平安车险']  //注意要和数据的name相对应
            },
            //工具箱
            toolbox:{
              show:true,//显示工具箱
              feature:{
                dataView:{show:true}, //以文字形式显示数据
                restore:{show:true},   //还原
                //dataZoom:{show:true}, //区域缩放
                saveAsImage:{show:true},  //保存图片
                //magicType:{type:['line','bar']}//动态数据切换,数据显示可以在该规定内容中切换显示方式,
              }
            },
            /*//视觉映射组件,将数据映射到视觉元素上
            visualMap: {
              show: false,
              min: 1,
              max: 2,
              dimension: 0, //选取数据的维度,如人数据:[身高,体重],则1代表将体重进行映射,默认值为数组的最后一位
              // seriesIndex: 4, //选取数据集合中的哪个数组,如{一班},{二班},默认选取data中的所有数据集
              inRange: {
                //选定了要映射的对象,用inRange详细写要渲染的具体细节,[x,y]中x指最小值对应的量(亮度,饱和度等),y指最大值对应的量,其余的按各自value线性渲染
                color:['red'],
                colorLightness: [0,1],
                colorSaturation:[0,1]
              }
            },*/
            //数据
            series : [
              {
                name: '成交数量',
                type: 'pie',
                radius: '55%',
                center: ['50%', '50%'],
                data:[

                ].sort(function (a, b) {
                  return a.value - b.value;
                }),

                roseType: 'radius',//角度和半径展现百分比,'area'只用半径展现
                label: { //饼图图形的文本标签
                  normal: {  //下同,normal指在普通情况下样式,而非高亮时样式
                    textStyle: {
                      color: 'rgba(255, 255, 255, 0.3)'
                    }
                  }
                },
                labelLine: {  //引导线样式
                  normal: {
                    lineStyle: {
                      color: 'rgba(255, 255, 255, 0.3)'
                    },
                    smooth: 0.5, //0-1,越大越平滑弯曲
                    length: 10,  //从块到文字的第一段长
                    length2: 20  //拐弯到文字的段长
                  }
                },

                itemStyle: { //图例样式
                  normal: {
                     //color: '#97413c',
                    shadowBlur: 50,//阴影模糊程度
                    shadowColor: 'rgba(0, 0, 0, 0.5)',//阴影颜色,一般黑

                  }
                },
                animationType: 'scale', //初始动画效果,scale是缩放,expansion是展开
                animationEasing: 'elasticOut', //初始动画缓动效果
                animationDelay: function (idx) {  //数据更新动画时长,idx限定了每个数据块从无到有的速度
                  return Math.random() * 200;
                }


              }
            ],
            color: ['#97858c','pink','green','yellow','orange','#97813c'],
          },

接下来看init代码

init(){
          // 基于准备好的dom,初始化echarts实例
          let myChart = echarts.init(document.getElementById('echartss'))
          // 绘制图表,this.echarts1_option是数据
          myChart.setOption(this.echarts1_option,true)
        },

然后是给动态数据赋值代码(从后台接口取得的数据)

 drawline() {
          // 数据初始化
          API.account.getAccount().then(({data}) => {
            if (data && data.code == 0) {
              this.echarts1_option.series[0].data=data.data.list;
            } else {
              this.$Message.error(data.msg);
            }
          }).catch((data) => {
            this.$Message.error('连接失败,请检查网络!');
          });

        },

到目前为止,页面的结果是:
运行结果
页面完全没有效果:
在加上下面代码后:

//数据自动刷新,必然需要一个监听机制告诉Echarts重新设置数据
    watch: {
      //观察option的变化
      echarts1_option: {
        handler(newVal, oldVal) {
          if (this.myChart) {
            if (newVal) {
              this.myChart.setOption(newVal);
            } else {
              this.myChart.setOption(oldVal);
            }
          } else {
            this.init();
          }
        },
        deep: true //对象内部属性的监听,关键。
      }
    },

我们再看看运行结果:
结果
数据虽然刷新了,但是我们的Echart’s组件却不知道,必须有个watch过程。

标签:vue,option,数据,color,true,show,动态数据,data,Echarts
From: https://www.cnblogs.com/yayuya/p/17022410.html

相关文章

  • vue 路由安全守卫
    全局守卫效果:1点击登陆或者注册按钮,跳转至相应登陆或者注册页面2点击导航其他按钮,提示用户未登陆不能跳转,然后默认返回登陆页面全局守卫代码:index.js的路由配置:constrout......
  • vue 二级三级路由配置
    最终效果:二级嵌套三级index.js页面路由配置:二级:在所在页面路由对象里,加children:[继续配置路径],页面path可以自己定义三级:和二级一样{path:'/about',name:'ab......
  • vue 面试问题总结
    vue-cli工程常用的npm命令有哪些?全局安装vue-clinpminstall--globalvue-cli创建一个基于webpack模板的新项目vueinitwebpackmy-project进入项目目录,运行cd......
  • vue中使用 bootstrap 和 jQuery
    使用bootstrap需要在项目中先安装jQuery安装jQuery:1.npminstalljquery--save-dev安装参数--save与--save-dev区别在于--save-dev安装于开发环境中 2.在webpack.base......
  • vue 全局组件封装
    vue中写好一个组件功能<template><divid="app"><divclass="popwin"><pclass="info">{{info}}</p><buttonclass="close_popwin"@cli......
  • vue 基础学习笔记【一】
    vue.js简介概念:构建用户界面的渐进式框架。(渐进式:不必一开始就用Vue所有的全家桶,根据场景,官方提供了方便的框架供你使用。)Vue的核心库只关注视图层。【引入vue】可以​​创......
  • vue 高德地图 即时搜索 模糊搜索 下拉搜索
    index.html里面引入amap:首先你要去  ​​https://lbs.amap.com/​​ 注册一个属于自己的key注册好账号后--点击右上角‘控制台’--左侧边栏‘应用管理--我的应用’---点......
  • vue vuex 学习小demo
    创建store.js 引入并使用vueximport Vuex from 'vuex'Vue.use(Vuex)1.使用new Vuex.Store创建({})创建store2.创建state:{}存放数据3.mutations:{}存放方法4.actions:{}......
  • vue3.0的全局api变化
    1.全局api使用的变化:vue3已经去除Vue语法,取代的是用createApp创建的app  2.其他改变2.1data函数的变化,在vue3data必须是一个函数,否则报错     2.2过......
  • vue3.0新组件
    1.fragment1.1解释和意义   1.2使用:没有特定的标签,直接不使用根标签即可2.teleport(传送)1.1解释和意义:不管嵌套多少层都可以直接进行组件传送1.2使用:t......