Echarts动态加载数据

  在为写这个项目之前,并没有大范围的写过前端,这次也是锻炼了,由于项目需求,要求echarts图动态加载数据(定时加载),一下是我在网上看到的例子,在此基础上做了修改,实现了功能。但觉得还有很多需改进和学习的地方。

使用window.setInterval自动刷新数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="divProgress" style="width: 600px;height:400px;"></div>
<script src="http://cdn.staticfile.org/jquery/2.1.1-rc2/jquery.min.js"></script>
<script src="http://echarts.baidu.com/build/dist/echarts.js"></script>
<script type="text/javascript">
    var myChart;
    // 路径配置
    require.config({
        paths: {
            echarts: 'http://echarts.baidu.com/build/dist'
        }
    });
    // 使用
    require(
            [
                'echarts',
                'echarts/chart/bar' // 使用柱状图就加载bar模块,按需加载
            ],
            function (ec) {
                // 基于准备好的dom,初始化echarts图表
                myChart = ec.init(document.getElementById('divProgress'));
                var option = {
                    tooltip: {
                        show: true
                    },
                    animation: false,
                    legend: {
                        data: ['销量']
                    },
                    xAxis: [
                        {
                            type: 'category',
                            data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
                        }
                    ],
                    yAxis: [
                        {
                            type: 'value'
                        }
                    ],
                    series: [
                        {
                            "name": "销量",
                            "type": "bar",
                            "data": [5, 20, 40, 10, 10, 20]
                        }
                    ]
                };
                // 为echarts对象加载数据
                myChart.setOption(option);
            }
    );

    //这里用setTimeout代替ajax请求进行演示
    //3s刷新一次
    window.setInterval(function () {
        var data = [0, 0, 0, 0, 0, 0];
        refreshData(data);
    },3000);

    function refreshData(data){
        if(!myChart){
            return;
        }
        //更新数据
        var option = myChart.getOption();
        option.series[0].data = data;
        myChart.setOption(option);
    }
</script>
</body>
</html>
  我认为这种方法存在一种弊端。如:在你设置的刷新时间较短的时候并未发现弊端,一旦设置刷新时间较长的话(如2min),很容易就会发现,在首次加载页面的时候并不能立即展示出数据,而是要经过刷新的时间间隔(2min)后,echarts方可展现。对此,我做了修改,修改之后的代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <!-- 引入 echarts.js -->
    <script type="text/javascript" src="js/echarts.min.js"></script>
    <!-- 引入jquery.js -->
    <script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>
    <script type="text/javascript" src="js/jquery.loading.js"></script>
</head>
<body>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 column">
    <div class="panel info-list" id="solrsumPanel">
        <div class="panel-heading">
            <span class="panel-title">响应时间</span>
        </div>
        <div class="panel-body graph" style="height: 400px;"
             id="solrsumChart"></div>
    </div>
</div>

<script type="text/javascript">
    var drawsolr = function() {

        // 基于准备好的dom,初始化echarts实例
        $('#solrsumPanel').showLoading()// 显示loading效果,同时关闭提示消息
        var myChart = echarts.init(document.getElementById('solrsumChart'));
        $.ajax({
            type : 'get',
            url : "data.json",
            data : {

            },
            success : function(data) {
                $.each(data.dateTime, function(i, d) {
                    data.dateTime[i] = data.dateTime[i].substring(0, 10) + ' -'
                            + data.dateTime[i].substring(11, 19);// 截取日期
                });
                var date3 = [];
                var nums = [];
                var datalist = [];
                var times = [];
                for (var i = 0; i < data.dateTime.length; i++) {
                    date3.push(data.dateTime[i]);
                    datalist.push(data.nums[i]);
                    times.push(data.cost[i]);
                }
                $('#solrsumPanel').hideLoading()
                // 指定图表的配置项和数据
                var option = {
                    tooltip : {
                        trigger : 'axis',
                        axisPointer : {
                            type : 'cross',
                            label : {
                                backgroundColor : '#283b56'
                            }
                        }
                    },
                    toolbox : {
                        show : true,
                        feature : {
                            dataView : {
                                readOnly : false
                            },
                            restore : {},
                            saveAsImage : {}
                        }
                    },
                    xAxis : [ {
                        type : 'category',
                        boundaryGap : true,
                        data : data.dateTime,
                        nameLocation : 'middle'
                    } ],
                    yAxis : [ {
                        type : 'value',
                        scale : true,
                        name : '数量',
                        boundaryGap : [ 0.2, 0.2 ],
                        axisLabel : {
                            formatter : '{value} 条'
                        }
                    }, {
                        type : 'value',
                        scale : true,
                        name : '时间',
                        boundaryGap : [ 0.2, 0.2 ],
                        splitLine : {
                            show : false
                        },
                        axisLabel : {
                            formatter : '{value} ms'
                        }
                    } ],
                    dataZoom : [ {
                        show : true,
                        realtime : true,
                        start : 65,
                        end : 85
                    }, {
                        type : 'inside',
                        realtime : true,
                        start : 65,
                        end : 85
                    } ],
                    series : [ {
                        name : '数量',
                        type : 'bar',
                        data : data.nums
                    }, {
                        name : '时间',
                        type : 'line',
                        yAxisIndex : 1,
                        data : data.cost
                    } ]
                };
                myChart.setOption(option);
            },
            error : function(XMLHttpRequest) {
                $('#solrsumPanel').hideLoading();
                $('#solrsumPanel').msg({
                    type : 'danger',
                    text : "查询数据出错,请联系管理人员!"
                });
            }
        });
    }


    $(function() {
        drawsolr();
    });

    //一分钟刷新一次
    setInterval(function() {
        drawsolr();
    }, 60000);
</script>
</body>
</html>
json数据格式如下:
{
    "dateTime": [
        "2017-05-05 00:10:02Z",
        "2017-05-05 00:20:02Z",
        "2017-05-05 00:30:02Z",
        "2017-05-05 00:40:02Z",
        "2017-05-05 00:50:02Z",
        "2017-05-05 01:00:02Z",
        "2017-05-05 01:10:02Z",
        "2017-05-05 01:20:02Z",
        "2017-05-05 01:30:02Z",
        "2017-05-05 01:40:02Z",
        "2017-05-05 01:50:02Z",
        "2017-05-05 02:00:02Z",
        "2017-05-05 02:10:02Z",
        "2017-05-05 02:20:02Z",
        "2017-05-05 02:30:02Z",
        "2017-05-05 02:40:02Z"
    ],
    "nums": [
        91,
        90,
        89,
        89,
        89,
        87,
        89,
        89,
        85,
        87,
        85,
        87,
        89,
        85,
        87,
        87
    ],
    "cost": [
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null
    ]
}
 这种方法虽然解决了上述的问题,但还是有不足的地方,例如:在动态加载数据的时候并不是局部(柱状折线)刷新,而是整张图都刷新,没有做到很好的数据实时推送。这一部分可以通过长轮询进行实现。后续会做进一步补充,今天就先到这儿吧......




  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue中使用Echarts动态数据的步骤如下: 1. 首先,需要在Vue组件中定义一个方法来获取动态数据。可以使用异步请求或者其他方式获取数据。在这个方法中,将获取到的数据处理成Echarts所需的格式,并将其赋值给一个变量,比如`eacartsData`。\[3\] 2. 在Vue组件的模板中,使用一个`div`元素来包裹Echarts图表,并给该`div`元素一个唯一的id,比如`echartsOne`。\[2\] 3. 在Vue组件的`mounted`生命周期钩子函数中,调用一个绘制Echarts图表的方法,比如`getEcharts()`。在这个方法中,使用`document.getElementById`方法获取到包裹Echarts图表的`div`元素,然后使用`echarts.init`方法初始化一个Echarts实例,并将其赋值给一个变量,比如`myChart`。接着,定义一个`option`对象,配置Echarts图表的样式和数据。在`series`属性中,将之前处理好的动态数据`eacartsData`赋值给`data`属性。最后,使用`myChart.setOption`方法将配置好的`option`应用到Echarts实例中。\[1\] 4. 最后,在获取到动态数据后,调用获取数据的方法,比如`getData()`。在这个方法中,通过异步请求或其他方式获取到数据,并将其处理成Echarts所需的格式。然后,将处理好的数据赋值给`eacartsData`变量,并调用`this.getEcharts()`方法重新绘制Echarts图表。\[3\] 这样,就可以实现在Vue中动态数据并绘制Echarts图表了。 #### 引用[.reference_title] - *1* *2* *3* [vue引入echarts图表,动态获取数据](https://blog.csdn.net/cuiyiran_/article/details/125456085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值