使用 angularJs 显示来自套接字 io 的数据

Displaying data from socket io using angularJs

本文关键字:io 数据 套接字 angularJs 显示 使用      更新时间:2023-09-26

我正在尝试从套接字io获取数据并使用angularJs在图形上显示数据。我从服务器获取了正确的数据,但是当我尝试显示它时,我得到:"没有要显示的数据"。我尝试调试我的控制器,我看到我正在获取数据,但我的 HTML 上的一些角度没有显示它。我也尝试使用异步.js但它仍然不起作用。

我的控制器代码:

$scope.graph2,data2 = [];
            socketFactory.emit('getTemplateStatistics', null);
            socketFactory.on('sendTemplateStatistics', function(result) {
                for (var i=0; i < result.length; i++) {
                    var temp = {label: result[i]._id, value: ""+result[i].total};
                    data2.push(temp);
                }
                    $scope.graph2 = {
                    chart: {
                        caption: "Age profile of website visitors",
                        subcaption: "Last Year",
                        startingangle: "120",
                        showlabels: "0",
                        showlegend: "1",
                        enablemultislicing: "0",
                        slicingdistance: "15",
                        showpercentvalues: "1",
                        showpercentintooltip: "0",
                        plottooltext: "Age group : $label Total visit : $datavalue",
                        theme: "fint"
                    },
                data2
                };
});

我的 HTML 代码:

<div class="statistics view indent">
    <div class="container" style="margin-top:10px">
        <header>
            <h3>Statistics Preview Displayer</h3>
        </header>
        <div>
            <fusioncharts 
                width="600" 
                height="400"
                type="pie3d"
                datasource="{{ graph2 }}"
            ></fusioncharts>
        </div>
        <a href="#/preferences" class="btn btn-primary" style="float: right;">Go back</a>
    </div>
</div>

我不认为这是一个套接字问题。可能在 for 循环完成执行之前分配了 '$scope.graph2',因此 'data2' 没有值。尝试像这样更改代码

$scope.graph2,data2 = [];
socketFactory.emit('getTemplateStatistics', null);
socketFactory.on('sendTemplateStatistics', function(result) {
    for (var i=0; i < result.length; i++) {
        var temp = {label: result[i]._id, value: ""+result[i].total};
        data2.push(temp);
        if(i == result.length - 1) {               // To ensure $scope.graph2 is assigned only after for loop completes and data has all values
            $scope.graph2 = {
                chart: {
                    caption: "Age profile of website visitors",
                    subcaption: "Last Year",
                    startingangle: "120",
                    showlabels: "0",
                    showlegend: "1",
                    enablemultislicing: "0",
                    slicingdistance: "15",
                    showpercentvalues: "1",
                    showpercentintooltip: "0",
                    plottooltext: "Age group : $label Total visit : $datavalue",
                    theme: "fint"
                },
                data2
            };
        }
    }
});

这样$scope.graph2 只有在 for 循环完成后才会被分配,因此 data2 不会为空