使用angularJs显示来自socket io的数据

Posted

技术标签:

【中文标题】使用angularJs显示来自socket io的数据【英文标题】:Displaying data from socket io using angularJs 【发布时间】:2016-05-27 12:36:03 【问题描述】:

我正在尝试从套接字 io 获取数据并使用 angularJs 在图表上显示数据。我从服务器获取正确的数据,但是当我尝试显示它时,我得到:“没有要显示的数据”。我试图调试我的控制器,我看到我正在获取数据,但是我的 html 上的一些角度没有显示它。 我也尝试过使用 Async.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 
                 
                
                type="pie3d"
                datasource=" graph2 "
            ></fusioncharts>
        </div>
        <a href="#/preferences" class="btn btn-primary" style="float: right;">Go back</a>
    </div>
</div>

【问题讨论】:

【参考方案1】:

我不认为这是一个套接字问题。可能在 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 不会为空

【讨论】:

以上是关于使用angularJs显示来自socket io的数据的主要内容,如果未能解决你的问题,请参考以下文章

改进这个 AngularJS 工厂以与 socket.io 一起使用

如何使用 Express、AngularJS、Socket.io 广播和获取通知?

AngularJS 不使用 socket.io 刷新视图

AngularJS:通过 https 使用 socket.io 的聊天应用程序

Angularjs 中的 Socket.io

Angularjs socket.io 服务