Javascript 当代码在信号器回调中时,AngularJS绑定延迟

Javascript 当代码在信号器回调中时,AngularJS绑定延迟,javascript,angularjs,signalr,Javascript,Angularjs,Signalr,我有一些更新AngularJS$scope属性的代码。如果此代码在函数中运行,则网页会立即更新。但是,当在SignalR回调函数中运行时,该代码不会立即更新网页 导致绑定立即更新的代码: 带角度绑定的HTML: <input id="name" type="text" ng-model="playerName" /><button ng-click="RegisterPlayer();">Register</button> 运行此操作时,将立即在网页上更新播

我有一些更新AngularJS$scope属性的代码。如果此代码在函数中运行,则网页会立即更新。但是,当在SignalR回调函数中运行时,该代码不会立即更新网页

导致绑定立即更新的代码:

带角度绑定的HTML:

<input id="name" type="text" ng-model="playerName" /><button ng-click="RegisterPlayer();">Register</button>
运行此操作时,将立即在网页上更新播放器的数量

下面是我如何重构代码以将信息发送到SignalR hub,然后在SignalR回调中使用相同的代码:

这里的功能与上面相同,但现在它只将信息发送到信号器集线器:

  $scope.RegisterPlayer = function () {

      hub.server.send($scope.playerName, -1);
  }
这是回调中的代码(它确实被命中,因此正确地完成了连接):


这实际上是可行的,除了在下一次单击页面上的按钮之前,网页不会更新绑定。它与以前的代码相同,但现在它只是在回调中。为什么我的页面不能立即更新?

如果在“外部”回调期间发生范围更改,Angular不会自动注意到这些更改

在这样的情况下,您需要告诉angular,作用域已经更改,您可以通过将代码包装到
$scope中来实现。应用
块:


这里有一个很好的解释:

我认为您可能需要将代码包装在
$scope中。apply
block:就是这样!那篇文章解释得很好。如果你想发表你的评论作为回答,我会接受。谢谢
  $scope.RegisterPlayer = function () {

      hub.server.send($scope.playerName, -1);
  }
  function receiveSignalRMessage(name, message) {
      var randomNumber = parseInt(message, 10);

      // -1 means the player was registered
      if (randomNumber == -1) {
          $scope.numberOfPlayers += 1;
          var player = {
              name: $scope.playerName,
              randomNumber: 0,
              totalScore: 0
          }
          $scope.players.push(player);
          return;
      }
  }