javascript - 当代码在 SignalR 回调中时 AngularJS 绑定(bind)延迟

标签 javascript angularjs signalr

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

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

带有 Angular 绑定(bind)的 HTML:

<input id="name" type="text" ng-model="playerName" /><button ng-click="RegisterPlayer();">Register</button>

Angular Controller 中的函数:

  $scope.RegisterPlayer = function () {

      $scope.numberOfPlayers += 1;
      var player = {
          name: $scope.playerName,
          randomNumber: 0,
          totalScore: 0
      }
      $scope.players.push(player);
  }

运行时,网页上的玩家数量会立即更新。

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

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

  $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;
      }
  }

这实际上有效,除了网页不会更新绑定(bind)直到下一次在页面上单击按钮。它和以前的代码一样,但现在它只是在回调中。为什么我的页面不立即更新?

最佳答案

如果在“外部”回调期间发生变化,Angular 不会自动注意到作用域的变化。

在这种情况下,你需要告诉 Angular 作用域已经改变了,你可以通过将代码包装在 $scope.apply block 中来做到这一点:

这里有一个很好的解释:http://jimhoskins.com/2012/12/17/angularjs-and-apply.html

关于javascript - 当代码在 SignalR 回调中时 AngularJS 绑定(bind)延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23014976/

相关文章:

javascript - 循环...非连续数字

JavaScript - 拆分 window.location.href 返回未定义

javascript - 自定义指令限制用户输入特殊字符 : angular Js

angularjs - 服务更改时更新 Angular JS 指令

javascript - 通过 Webpack 和 Vue.JS 导入并使用第 3 方包

javascript - PouchDB数据销毁后未删除

javascript - 如何自定义货币过滤器以在 angularJS 中显示货币符号 '€' 或任何其他货币符号

c# - Asp.Net SignalR DependencyResolver 不解析集线器

signalr - 无法成功初始化任何传输。尝试为自动初始化指定不同的传输方式或根本不指定传输方式

c# - 如何在 SignalR hub 的 Unity IoC 容器中注入(inject)依赖项?