美文网首页
Echarts 刷新数据需异步

Echarts 刷新数据需异步

作者: 一长亭 | 来源:发表于2017-03-22 10:29 被阅读0次

Echarts重新渲染数据时,需要异步


入坑情景:

在项目中需要使用echarts,所以在百度官方文档上找了一下,在根据以下代码:

1.引入Echarts:

<!DOCTYPE html>
<html>
<header>
    <meta charset="utf-8">
    <!-- 引入 ECharts 文件 -->
    <script src="echarts.min.js"></script>
</header>
</html>

2.准备DOM容器来盛放图表:

<body>
    <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
    <div id="main" style="width: 600px;height:400px;"></div>
</body>

3.为图表准备数据:

// 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        // 指定图表的配置项和数据
        var option = {
            title: {
                text: 'ECharts 入门示例'
            },
            tooltip: {},
            legend: {
                data:['销量']
            },
            xAxis: {
                data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
            },
            yAxis: {},
            series: [{
                name: '销量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            }]
        };

        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);

以下就是生成的效果图:

echarts_effect.png

在Angular中使用:
1.定义指令

var md = require('../module/common');
md.directive('echarts', echartsDirective);

echartsDirective.$inject = ['$rootScope', '$parse'];

function echartsDirective($rootScope,$parse){
     return {
        restrict: 'EA',
        scope:{option:"="},
        link: function(scope, ele, attrs) {
        var nowid = attrs.id;
            var myChart = echarts.init(document.getElementById(nowid));
            myChart.setOption(scope.option);
        }
    };
}

2.在jade中引入指令

div(echarts ="myecharts" id="myecharts1" style="width:100%;height:500px;" 
option="option1")

3.在Controller中初始echarts

initChart(data);
function initChart(resFigureData) {
    $scope.option1 = {
      title: {
        text: '工单个数'
      },
      tooltip: {},
      toolbox: {
        show: true,
        feature: {
          mark: {show: true},
          dataView: {show: true, readOnly: false},
          magicType: {show: true, type: ['line', 'bar']},
          restore: {show: true},
          saveAsImage: {show: true}
        }
      },
      legend: {
        data: ['工单个数']
      },
      xAxis: {
        data: ['总量', '客观题', '主观题']
      },
      yAxis: {},
      series: [
        {
          name: '工单个数',
          type: 'bar',
          data: [resFigureData.total_bill, resFigureData.kg_count, resFigureData.zg_count],
          barMaxWidth: 50,
          itemStyle: {
            normal: {
              color: function (params) {
                var colorList = [
                  '#C1232B', '#B5C334', '#FCCE10', '#E87C25', '#27727B',
                  '#FE8463', '#9BCA63', '#FAD860', '#F3A43B', '#60C0DD',
                  '#D7504B', '#C6E579', '#F4E001', '#F0805A', '#26C0C0'
                ];
                return colorList[params.dataIndex];
              },
              label: {
                show: true,
                position: 'top',
                formatter: '{c}m',
                textStyle: {
                  color: 'tomato'
                }
              }
            }
          }
        }
      ]
    };
}

到目前为止,可以在页面中渲染出相应的图表。

然而,需求是要根据时间的变化改变图表中的内容。几经尝试,发现这个initChart方法只能被触发一次。

想法:当点击按钮时,时间发生了变化,让当Controller发一个事件出去,让指令中的link来监听这个事件。

发事件:

$scope.$broadcast('FigureDataChange', ()=> {});

监听事件:

scope.$on('FigureDataChange', function() {
            myChart.setOption(scope.option);           
        });

在页面中还是没达到效果,第一次点击时,坐标内的内容全为0,第二次点击才出现相应的数据。

猜测:可能是数据还没来得及更新,图表就已渲染完了,因为数据是请求的。
所以,采用$timeout来异步执行事件分发。

$timeout(function () {
        $scope.$broadcast('FigureDataChange', ()=> {});
});

結论:echarts更新数据时,即时显示数据应异步操作的。

相关文章

  • Echarts 刷新数据需异步

    Echarts重新渲染数据时,需要异步 入坑情景: 在项目中需要使用echarts,所以在百度官方文档上找了一下,...

  • echarts的异步数据加载及更新

    echarts可以使用ajax实现异步刷新数据 //后台代码 前台代码

  • 基于VUE的SPA单页应用开发-加载性能篇

    1、基于异步数据的vue页面刷新 先看看基于异步数据的vue页面刷新后,都发生了啥~ 如图所示: 图1 基于异步数...

  • AJAX Asynchronous JAvaScript and

    异步刷新,不需要提交自己数据刷新页面。

  • ECharts异步请求数据

    ECharts是百度的一个用于数据可视化图表展示的一个开源工具。 ECharts官网:ECharts 一、异步请求...

  • 小程序遇到的问题(持续更新)

    1、echarts使用:初始化图表-按照官方例子没问题,异步加载图表不行,无例子2、echarts使用:数据请求失...

  • echarts数据异步更新

    异步加载 数据是在初始化后setOption中直接填入的,但是很多时候可能数据需要异步加载后再填入。ECharts...

  • ECharts 异步数据加载

    先设置好别的样式,显示出一个空的直角坐标轴,然后获取并填入数据,操作如下: 实验发现,通过 get 请求回来的 d...

  • html 页面的优化处理(ajax)

    同步加载(刷新):每次刷新的是整个页面的数据 异步加载(刷新):每次刷新的是整个页面的部分数据 由于之前做公司内部...

  • AJAX

    AJAX:异步的JavaScript和XML 历史 发请求 1.form需刷新页面 ...

网友评论

      本文标题:Echarts 刷新数据需异步

      本文链接:https://www.haomeiwen.com/subject/krtonttx.html