Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度+;Websockets&x2B;数据呈现_Javascript_Angularjs_Websocket - Fatal编程技术网

Javascript 角度+;Websockets&x2B;数据呈现

Javascript 角度+;Websockets&x2B;数据呈现,javascript,angularjs,websocket,Javascript,Angularjs,Websocket,我有一个使用WebSocket的应用程序。 在服务器上更改一些数据时,在我从websocket收到一些消息后,更改了什么,需要更新表中的数据。我从websocket获取数据,发送获取数据的get请求,并用数据更新我的范围,但我并没有看到表中的更改。 在$scope.ordersList中,我保存从服务器获取的日期 我的WebSocket服务: var services = angular.module('services', []); services.factory('EventService

我有一个使用WebSocket的应用程序。 在服务器上更改一些数据时,在我从websocket收到一些消息后,更改了什么,需要更新表中的数据。我从websocket获取数据,发送获取数据的get请求,并用数据更新我的范围,但我并没有看到表中的更改。 在$scope.ordersList中,我保存从服务器获取的日期

我的WebSocket服务:

var services = angular.module('services', []);
services.factory('EventService', ['$cookies',
    function($cookies) {
        var service = {};
        service.connect = function() {
            if (service.ws) {
                return;
            }
            var ws = new WebSocket("ws://" + window.location.host + "/events/");

            ws.onopen = function() {
                ws.send(JSON.stringify({
                    type: "auth",
                    token: $cookies.token
                }));
                console.log("Succeeded to open a conection");
            };
            ws.onerror = function() {
                console.log("Failed to open a connection");
            };
            ws.onmessage = function(message) {
                var obj = JSON.parse(message.data);
                if (obj.result) return;

                if (obj.id) {
                    setTimeout(function() {
                        service.callback(obj);
                    }, 1000)
                }
            };
            service.ws = ws;
        };
        service.subscribe = function(callback) {
            service.callback = callback;
        };
        return service;
    }
]);
如何在控制器中使用它:

EventService.subscribe(function(msg) {

            console.log('msg', msg);
            var item = $.grep($scope.ordersList, function(item) {
                return item.id == msg.id
            })
            if (item.length > 0) {
                item[0].status = msg.status
            } else {
                $scope.ordersList.push(msg);
            }

            $scope.$apply();

        });
        $scope.getOrders();
        EventService.connect();
和我的模板:

<tr item="parameter" ng-repeat="item in ordersList">
<td>{{item.id}}</td>
<td>{{item.symbol}}</td>
</tr>

{{item.id}
{{item.symbol}

您需要将service.callback包装在$rootScope.apply中,以将其放入angulars摘要循环中。勾选此项以了解概念: