luodiab 2024-03-18 16:58 采纳率: 68.8%
浏览 8
已结题

获取后台数据后,通过折线图展示数据

现在我需要在一个html页面中,通过thymeleaf模板读取一个从后端传来的一个list集合数据,而读取到这个list集合后我还要分别取它的每个元素中的createTime属性的值作为曲线图的横轴,data属性的值作为折线图的竖轴,然后通过折线图展示出来。

前端代码部分:

<!DOCTYPE html>
<!--suppress ThymeleafVariablesResolveInspection -->
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
    <meta charset="UTF-8">
    <title>设备详细</title>

    <th:block th:include="include :: header('设备详细')" />
    <script src="https://cdn.bootcss.com/echarts/4.2.1-rc1/echarts.min.js"></script>

</head>
<body>

<div class="main-content">
    <form class="form-horizontal" th:each="inforTencent,state: ${inforTencentList}">
        <script th:inline="javascript">
            dataList.push([[${inforTencent.createTime}]]);
            dataList.push([[${inforTencent.data}]]);
        </script>
    </form>
</div>

<div id="box" style="width: 600px;height:400px;"></div>

<script th:inline="javascript">

    var dataList = [];
    var createTimeList = [];

    // 获取到这个DOM节点,然后初始化
    var myChart = echarts.init(document.getElementById("box"));

    // option 里面的内容基本涵盖你要画的图表的所有内容
    var option = {
        backgroundColor: '#FBFBFB',
        tooltip : {
            trigger: 'axis'
        },
        legend: {
            data:['数据']
        },

        calculable : true,


        xAxis : [
            {
                axisLabel:{
                    rotate: 30,
                    interval:0
                },
                axisLine:{
                    lineStyle :{
                        color: '#CECECE'
                    }
                },
                type : 'category',
                boundaryGap : false,
                data : function (){
                    var list = [];
                    for (var i =0; i <= createTimeList.length; i++) {
                        list.push(createTimeList[i]);
                    }
                    return list;
                }()
            }
        ],
        yAxis : [
            {

                type : 'value',
                axisLine:{
                    lineStyle :{
                        color: '#CECECE'
                    }
                }
            }
        ],
        series : [
            {
                type:'line',
                //symbol:'none',
                smooth: 0.2,
                color:['#66AEDE'],
                data:function (){
                    var list = [];
                    for (var i =0; i <= dataList.length; i++) {
                        list.push(dataList[i]);
                    }
                    return list;
                }()
            }
        ]
    };

    myChart.setOption(option);
</script>

</body>
</html>


运行后仍然没办法正确展示这个折线图,报我试图访问一个名为"dataList"的变量,但是这个变量并没有被定义
我想请问一下该如何修改,才可以令这个折线图展示出来。

大概需求:读取后端传来的一个list集合,将集合元素中的createTime属性的值作为曲线图的横轴,data属性的值作为曲线图的竖轴,然后通过折线图展示出来。

请教一下各位有没有谁帮忙修改一下这个页面,已经困惑好几天了,谢谢大家。

  • 写回答

2条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 2024-03-18 16:58
    关注

    luodiab 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    根据你提供的代码,可能有以下问题导致折线图无法正确展示:

    1. JavaScript脚本中的变量定义位置错误:你在form标签内部定义了JavaScript脚本来读取数据,但是实际上JavaScript脚本应该在script标签中,而不是在form标签中。你可以将JavaScript脚本移到form标签外部。

    2. Thymeleaf模板表达式的写法错误:在Thymeleaf模板中,表达式应该用*{}包裹,而不是[[${}]。在你的代码中,应该将[[${inforTencent.createTime}][[${inforTencent.data}]修改为*{inforTencent.createTime}*{inforTencent.data}

    3. 格外注意for循环的终止条件:在JavaScript代码中的for循环,数组的下标应该小于数组长度,但是你的代码中循环条件为i <= createTimeList.lengthi <= dataList.length,这会导致数组越界问题。应该将循环条件修改为i < createTimeList.lengthi < dataList.length

    按照上述几点修改,代码如下:

    <div class="main-content">
        <form class="form-horizontal" th:each="inforTencent,state: ${inforTencentList}">
        </form>
    </div>
    
    <div id="box" style="width: 600px;height:400px;"></div>
    
    <script th:inline="javascript">
        var dataList = [];
        var createTimeList = [];
    
        /* 获取后端传来的数据,并将createTime和data分别放入对应的数组中 */
        /* 注意Thymeleaf表达式写法为*{} */
        /* 使用Thymeleaf的th:each遍历集合 */
        /* 在JavaScript中用push方法添加元素到数组中 */
        /* 使用*{inforTencent.createTime}和*{inforTencent.data}来获取属性值 */
        /* 注意Thymeleaf表达式用[*{...}]包裹 */
        /* 注意for循环终止条件为i < createTimeList.length和i < dataList.length */
        /* 这里使用<符号而不是<=符号 */
        <div th:each="inforTencent,state: ${inforTencentList}">
            dataList.push([[*{inforTencent.createTime}]]);
            createTimeList.push([[*{inforTencent.data}]]);
        </div>
    
        /* 初始化图表 */
        var myChart = echarts.init(document.getElementById("box"));
    
        /* 创建option对象,定义图表的样式和数据 */
        var option = {
            backgroundColor: '#FBFBFB',
            tooltip: {
                trigger: 'axis'
            },
            legend: {
                data: ['数据']
            },
            calculable: true,
            xAxis: [
                {
                    axisLabel: {
                        rotate: 30,
                        interval: 0
                    },
                    axisLine: {
                        lineStyle: {
                            color: '#CECECE'
                        }
                    },
                    type: 'category',
                    boundaryGap: false,
                    data: createTimeList
                }
            ],
            yAxis: [
                {
                    type: 'value',
                    axisLine: {
                        lineStyle: {
                            color: '#CECECE'
                        }
                    }
                }
            ],
            series: [
                {
                    type: 'line',
                    smooth: 0.2,
                    color: ['#66AEDE'],
                    data: dataList
                }
            ]
        };
    
        /* 设置图表的option并渲染 */
        myChart.setOption(option);
    </script>
    

    请按照以上修改后的代码进行尝试,如果问题仍然存在,请提供相关的错误信息和后台数据的结构,以便更好地帮助你解决问题。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路