$scope
在回调函数中不起作用。
angular.
module('common').
controller('bidVBoxController', ['$scope', '$location','$element', 'Socket', 'Bid',
function($scope, $location, $element, Socket,Bid){
var self = this;
self.socket = new Socket("ws://192.168.225.59:8010/ws/bidData/");
$scope.placeBid = function(){
self.socket.send({
type: "place_bid",
data: {
bidId: $scope.bid.id
}
});
};
console.log($scope.bid);
$scope.bid.top_bid_data="sss";//This works.
self.socket.onmessage(function(event) {
var data = JSON.parse(event.data);
console.log($scope.bid);//This doesn't work
$scope.bid.top_bid_data=data["message"];//This doesn't work
});
}])
回调函数传递到self.socket.onmessage
,该函数应该更新$scope
变量。但看来这行不通。请帮忙。
更新1:
此控制器与指令bidVBox
一起使用,并且有多个元素:
<bid-v-box ng-repeat="bid in bids">
</bid-v-box>
在第一个bid-v-box
元素的控制器中执行回调函数时,$scope.bid.top_bid_data=data["message"];
更新最后一个元素的范围,而不是第一个元素的范围。我也尝试使用$scope.$apply(function(){$scope.bid.top_bid_data=data["message"];})
。但这没用。
答案 0 :(得分:1)
将websocket构造函数移动到服务并仅使用一个连接是比较明智的。如所写,ng-repeat
正在创建到服务器的多个websocket连接。由服务器端应用程序来区别对待每个连接。显然,服务器正在响应上次建立的连接,而不是响应每个单独的连接。有关更多信息,请参见Stackoverflow: Multiple Websockets。
另请参阅Github WS Issue #684 - Multiple connections, but single websocket.on("message")
event emitter