Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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
Angularjs 角度绑定未使用socket.io广播更新_Angularjs_Socket.io - Fatal编程技术网

Angularjs 角度绑定未使用socket.io广播更新

Angularjs 角度绑定未使用socket.io广播更新,angularjs,socket.io,Angularjs,Socket.io,我有一个名为currentPlayer的服务器变量,它在emit'init'调用中正确绑定,但不会在broadcast.emit中绑定。从客户端传递的变量turnNumber首先会正确更新。当pass事件被触发时,我可以看到currentPlayer在终端中切换值,但我不明白为什么它不会在视图中更新 以前绑定到基元类型时遇到一些问题,所以我尝试执行额外的步骤并将currentPlayer分配给对象数组:$scope.globalVars=[{currentPlayer:data.currentP

我有一个名为currentPlayer的服务器变量,它在emit'init'调用中正确绑定,但不会在broadcast.emit中绑定。从客户端传递的变量turnNumber首先会正确更新。当pass事件被触发时,我可以看到currentPlayer在终端中切换值,但我不明白为什么它不会在视图中更新

以前绑定到基元类型时遇到一些问题,所以我尝试执行额外的步骤并将currentPlayer分配给对象数组:$scope.globalVars=[{currentPlayer:data.currentPlayer}],但这没有帮助

//server
var currentPlayer = 1;
socket.emit('init', {
    currentPlayer: currentPlayer
});
socket.on('pass', function (data) {
    currentPlayer = currentPlayer == 1 ? 2 : 1;
    console.log(currentPlayer);
    socket.broadcast.emit('pass', {
        number: data.turnNumber,
        currentPlayer: currentPlayer
    });
});

//client
socket.on('init', function (data) {
    $scope.globalVar.currentPlayer = data.currentPlayer;
});
socket.on('pass', function (data) {
    $scope.globalVar.turnNumber = data.number;
    $scope.globalVar.currentPlayer = data.currentPlayer;
});
//click event
$scope.globalVar.turnNumber++;
socket.emit('pass', {
    turnNumber: $scope.globalVar.turnNumber
});

<!-- html -->
{{globalVar.currentPlayer}} {{globalVar.turnNumber}}

这些调用似乎是在anuglar上下文之外执行的。尝试在socket.on处理程序中使用$scope.$apply,如

socket.on('pass', function (data) {
   $scope.$apply(function() {
    $scope.globalVar.turnNumber = data.number;
    $scope.globalVar.currentPlayer = data.currentPlayer;
   });
});

这些调用似乎是在anuglar上下文之外执行的。尝试在socket.on处理程序中使用$scope.$apply,如

socket.on('pass', function (data) {
   $scope.$apply(function() {
    $scope.globalVar.turnNumber = data.number;
    $scope.globalVar.currentPlayer = data.currentPlayer;
   });
});