gpt4 book ai didi

javascript - Angular + Websockets + 数据渲染

转载 作者:行者123 更新时间:2023-12-03 12:28:01 24 4
gpt4 key购买 nike

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

我的 websockets 服务:

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;
}
]);

我如何在 Controller 中使用它:

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>

最佳答案

您需要将 service.callback 包装在 $rootScope.apply 中以使其进入 Angulars 摘要循环。检查这个以获得概念:http://www.html5rocks.com/en/tutorials/frameworks/angular-websockets/

关于javascript - Angular + Websockets + 数据渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24089359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com