解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)


Posted in Javascript onJuly 20, 2020

1.问题描述:在echarts弹框中嵌入echarts,在页面数据改变时,echarts视图不更新;

解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)

2.解决办法:

数据更新时以为drawLine()函数在updated()里面执行(这种情况之前碰到过),后来发现热更新之后视图更新了,所以跟周期函数没有关系;参考了一下网上的一些资料,发现可以用vue中的watch()函数来监听数据的更新,一旦数据更新了,那么就在watch()函数中调用drawLine()函数,发现视图更新了,完美解决。

解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)

补充知识:vue echarts line动态刷新数据组件

我就废话不多说了,大家还是直接看代码吧~

<template>
 <div class="echartLine-wrap">
  <div class="echartLine-title">
   <img src="@/assets/icon.png" alt />
   <div class="text">
    <div>{{echartData.title}}</div>
    <div>{{echartData.title2}}</div>
    <div>{{echartData.title3}}</div>
   </div>
  </div>
  <div ref="lineDom" id="myChart"></div>
 </div>
</template>

<script>
export default {
 name: "echartLine",
 props: {
  echartData: {
   type: Object,
   default: () => {}
  }
 },
 data() {
  return {
   img: require("../assets/time_bj.png")
  };
 },
 mounted() {
  setTimeout(() => {
   this.ButtomDrawLine();
  }, 500);
 },
 created() {},
 methods: {
  ButtomDrawLine() {
   let t = this;
   let myChart = this.$echarts.init(this.$refs.lineDom);
   myChart.setOption({
    title: { text: "" },
    tooltip: {
     trigger: "axis",
     borderRadius: 8, //边框圆角
     backgroundColor: "rgba(51,204,204,0)", //背景颜色(此时为默认色)
     formatter: function(params) {
      let value = params[0].value;
      let name = params[0].name;
      let html = ` 
       <div class='line-html'> 
        <span>
        <span class='active' style="background: ${t.echartData.itemStyle.color}"></span>
        ${value}
        </span>
        <span>${t.echartData.title3}</span>
        <span></span>
        <span>${name}</span>
       </div>
      `;
      return html;
     },
     textStyle: { color: "#ffff", align: "center", fontSize: 18 }
    },
    // legend: {
    //  left: 'right',
    //  textStyle: {//图例文字的样式
    //   color: '#ffffff',
    //   fontSize: 14
    //  },
    //  show: true,
    //  data: [
    //   {
    //    name: '审方数',
    //   },
    //   {
    //    name: '处方数',
    //   },
    //   {
    //    name: '会员数'
    //   },
    //   {
    //    name: '含麻登记',
    //   }
    //  ]
    // },
    /*toolbox: {
      feature: {
       dataView: {readOnly: false},
       restore: {},
       saveAsImage: {}
      },
      iconStyle:{
       normal:{
        color:'white',//设置颜色
       }
      }
     },*/
    xAxis: [
     {
      boundaryGap: true,
      type: "category",
      axisLine: {
       // x轴的颜色和宽度
       lineStyle: {
        color: "#0070C6"
       }
      },
      axisLabel: {
       show: true,
       textStyle: {
        color: "#fff"
       }
      },
      offset: 0,
      nameTextStyle: {
       align: "right"
      },
      axisTick: {
       alignWithLabel: true
      },
      data: t.echartData.XData
     }
    ],
    yAxis: [
     {
      type: "value",

      axisLabel: {
       show: true,
       textStyle: {
        color: "#fff"
       }
      },
      axisLine: {
       lineStyle: {
        color: "#0070C6"
       }
      },
      // 控制网格线是否显示
      splitLine: {
       show: false
      },
      min: 0,
      splitNumber: 5,
      boundaryGap: [0.2, 0.2],
      data: [0, 50, 100, 150]
     }
    ],
    grid: {
     top: "3.5%",
     left: "0",
     right: "0",
     bottom: "0",
     containLabel: true
    },
    series: [
     {
      name: t.echartData.title,
      type: "line",
      // smooth: true,

      showSymbol: true,
      symbolSize: 4, // 拐点图形大小
      cursor: "pointer",
      areaStyle: {
       normal: {
        color: new t.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
         {
          offset: 0,
          color: t.echartData.areaStyleColor.fromColor
         },
         {
          offset: 0.4,
          color: t.echartData.areaStyleColor.toColor
         }
         // {
         //  offset: 1,
         //  color: "rgba(63,227,236,0.00)"
         // }
        ])
        // ['rgba(63,227,236,0.3)'],
       }
      },
      itemStyle: {
       color: [t.echartData.itemStyle.color]
      },
      data: t.echartData.YData,
      icon:
       "image://http://file.dyzhkj.cn/null/1562315548784PyZcsO处方数.png"
     }
     // {
     //  name: '处方数',
     //  type: 'line',
     //  smooth: true,
     //  symbolSize: 1,     // 拐点图形大小
     //  areaStyle: {
     //   color: new t.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
     //    offset: 0,
     //    color: 'rgba(82,206,86,0.8)'
     //   }, {
     //    offset: .4,
     //    color: 'rgba(82,206,86,0.3)'
     //   }, {
     //    offset: 1,
     //    color: 'rgba(82,206,86,0.00)'
     //   }])
     //   // ['rgba(82,206,86,0.3)'],
     //  },
     //  itemStyle: {
     //   normal: {
     //    color: ['#52CE56'],
     //   }
     //  },
     //  data: [10, 5, 15, 5, 15, 20, 15, 20, 15, 5, 15, 10]
     // },
     // {
     //  name: '会员数',
     //  type: 'line',
     //  smooth: true,
     //  symbolSize: 1,     // 拐点图形大小
     //  areaStyle: {
     //   color: new t.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
     //    offset: 0,
     //    color: 'rgba(251,98,100,0.8)'
     //   }, {
     //    offset: .4,
     //    color: 'rgba(251,98,100,0.3)'
     //   }, {
     //    offset: 1,
     //    color: 'rgba(251,98,100,0.00)'
     //   }])
     //   // ['rgba(251,98,100,0.3)'],
     //  },
     //  itemStyle: {
     //   normal: {
     //    color: ['#FB6264'],
     //   }
     //  },
     //  data: [35, 45, 65, 25, 65, 44, 15, 40, 35, 46, 50, 25]
     // },
     // {
     //  name: '含麻登记',
     //  type: 'bar',
     //  itemStyle: {
     //   normal: {
     //    color: new t.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
     //     offset: 0,
     //     color: 'rgba(231,233,65,0.8)'
     //    }, {
     //     offset: .4,
     //     color: 'rgba(231,233,65,0.3)'
     //    }, {
     //     offset: 1,
     //     color: 'rgba(231,233,65,0.00)'
     //    }]),
     //    // ['rgba(231,233,65,0.5)'],
     //    barBorderColor: '#E7E941',      // 柱条边线
     //    barBorderRadius: 0,        // 柱条边线圆角,单位px,默认为0
     //    barBorderWidth: 1,           // 柱条边线线宽,单位px,默认为1
     //   }
     //  },
     //  barWidth: 15,//柱图宽度
     //  data: [5, 7, 3, 7, 5, 4, 5, 6, 4, 7, 5, 8]
     // }
    ]
   });
  }
 }
};
</script>

<style lang="less">
.line-html {
 width: 83.5px;
 height: 38px;
 text-align: center;
 background: url("../assets/line_btn_bj.png") no-repeat;
 background-size: 83.5px 38px;
 line-height: 42px;
 box-sizing: border-box;
 position: relative;
 font-size: 9px;
 padding-right: 2px;
 box-sizing: border-box;

 .active {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: #fff;
  display: inline-block;
  margin-left: 3px;
  margin-bottom: 1.5px;
  box-sizing: border-box;
 }
 > span:nth-child(3) {
  background: url("../assets/time_bj.png") no-repeat;
  background-size: 38.5px 14px;
  position: absolute;
  top: -5px;
  left: 23px;
  right: 0;
  bottom: 0;

  box-sizing: border-box;
 }
 > span:nth-child(4) {
  position: absolute;
  top: -19px;
  left: 2px;
  right: 2px;
  bottom: 0;
  font-size: 8px;
  
   box-sizing: border-box;
 }
}
</style>
<style scoped lang="less">
.echartLine-wrap {
 width: 100%;
 height: 100%;
 .echartLine-title {
  width: 100%;
  color: #fff;
  display: flex;
  flex-direction: row;
  justify-content: start;
  align-items: center;
  padding-bottom: 13px;

  > img {
   width: 7.5px;
   height: 14px;
   margin-right: 8.5px;

   box-sizing: border-box;
  }
  > .text {
   text-align: left;
   display: flex;
   flex-direction: row;
   justify-content: start;
   font-size: 12px;
   line-height: 1;
   align-items: baseline;

   > div:nth-child(2) {
    font-size: 15px;
    margin: 0 5px 0 10px;
    font-weight: bold;

    box-sizing: border-box;
   }
  }
 }
 #myChart {
  width: 100%;
  height: 165px;
 }
}
</style>

调用

//html
 <echartLine :echartData="echartData" ref="echartData1" />

//index.js
 echartData: {
    title: "溶氧",
    title2: 3,
    title3: "毫克/升",
    XData: [1,2,3,4,5,6,7,8,9],
    YData: [12,34,56,66,65,77,12,11,33,44],

    areaStyleColor: {
     fromColor: "#1AB8F9",
     toColor: "rgba(63,227,236,0.1)"
    },
    itemStyle: {
     color: "#1AB8F9"
    }
   }

以上这篇解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
Mar 22 Javascript
一步一步制作jquery插件Tabs实现过程
Jul 06 Javascript
JQuery解析HTML、JSON和XML实例详解
Mar 29 Javascript
JQUERY简单按钮轮换选中效果实现方法
May 07 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
Aug 24 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
Dec 28 Javascript
使用jQuery处理AJAX请求的基础学习教程
May 10 Javascript
js阻止冒泡和默认事件(默认行为)详解
Oct 20 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
May 12 Javascript
JS中的JSON对象的定义和取值实现代码
May 09 Javascript
vue移动端监听滚动条高度的实现方法
Sep 03 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
Apr 30 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
Jul 20 #Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
Jul 20 #Javascript
vue-router之解决addRoutes使用遇到的坑
Jul 19 #Javascript
解决vue+router路由跳转不起作用的一项原因
Jul 19 #Javascript
解决vue项目router切换太慢问题
Jul 19 #Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
Jul 19 #Javascript
vue2.* element tabs tab-pane 动态加载组件操作
Jul 19 #Javascript
You might like
PHP 读取Postgresql中的数组
2013/04/14 PHP
PHP加密解密函数详解
2015/10/28 PHP
php检查页面是否被百度收录
2015/10/28 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
JavaScript二维数组实现的省市联动菜单
2014/05/08 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
简明 Python 基础学习教程
2007/02/08 Python
详解Python中的动态属性和特性
2018/04/07 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
python实现决策树分类(2)
2018/08/30 Python
python中update的基本使用方法详解
2019/07/17 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
a标签下载链接的简单实现
2016/09/13 HTML / CSS
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
英国高街电视:High Street TV
2018/05/22 全球购物
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
土木工程师岗位职责
2013/11/24 职场文书
员工工作表扬信范文
2014/01/13 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书