解决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 form 验证函数 弹出对话框形式
Jun 23 Javascript
WEB高性能开发之疯狂的HTML压缩
Jun 19 Javascript
理解Javascript_10_对象模型
Oct 16 Javascript
JavaScript学习笔记记录我的旅程
May 23 Javascript
在Python中使用glob模块查找文件路径的方法
Jun 17 Javascript
JavaScript基本数据类型及值类型和引用类型
Aug 25 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
Aug 24 Javascript
使用angularjs.foreach时return的问题解决
Sep 30 Javascript
JavaScript使用闭包模仿块级作用域操作示例
Jan 21 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
Mar 16 jQuery
JavaScript数值类型知识汇总
Nov 17 Javascript
JS实现公告上线滚动效果
Jan 10 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
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
解析php类的注册与自动加载
2013/07/05 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
php判断类是否存在函数class_exists用法分析
2014/11/14 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
详解PHP归并排序的实现
2016/10/18 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
Javascript this指针
2009/07/30 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
密码框显示提示文字jquery示例
2013/08/29 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
Python实现好友全头像的拼接实例(推荐)
2017/06/24 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
python读写csv文件实例代码
2019/07/05 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
Python request post上传文件常见要点
2020/11/20 Python
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
促销活动总结范文
2014/04/30 职场文书
治安消防安全责任书
2014/07/23 职场文书
关于安全的广播稿
2014/10/23 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android