当代码在SignalR回调内时,AngularJS绑定延迟
AngularJS bindings delayed when code is inside SignalR callback
我有一些更新AngularJS$范围属性的代码。如果此代码在函数中运行,则会立即更新网页。然而,当在SignalR回调函数中运行时,相同的代码不会立即更新网页。
导致绑定立即更新的代码:
带角度绑定的HTML:
<input id="name" type="text" ng-model="playerName" /><button ng-click="RegisterPlayer();">Register</button>
角度控制器内的功能:
$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;
}
}
这实际上是有效的,只是网页直到下次点击页面上的按钮时才会更新绑定。它与以前的代码相同,但现在它只是在回调中。为什么我的页面不立即更新?
Angular不会自动注意到在"外部"回调期间发生的范围更改。
在这种情况下,你需要告诉angular范围已经改变了,你可以通过将代码包装在$scope.apply
块中来做到这一点:
这里有一个很好的解释:http://jimhoskins.com/2012/12/17/angularjs-and-apply.html
相关文章:
- AngularJS绑定没有'在没有填充父范围的情况下无法工作
- AngularJS绑定仅在更改后更新
- 如何防止 jQuery-UI 按钮集破坏 AngularJS 绑定
- AngularJS绑定模型以选择更新输入数字字段,最小值为最大值
- 如何在没有任何浏览器插件的情况下调试AngularJS绑定{{expression}}
- angularjs绑定赢得'除非我打GET电话,否则不会显示
- AngularJs绑定以进行选择
- AngularJS绑定到输入的回车键,如果输入是按钮,则提交
- 我怎样才能让 AngularJS 绑定使用花哨的框对话框
- AngularJS 绑定要选择的数据下拉列表,当另一个选择下拉列表的值发生更改时
- Angularjs 绑定 2 指令将模型范围限定为父控制器模型
- 使用 AngularJS 绑定图像标记
- AngularJS绑定变量超出范围并通知更新
- 如何使用 AngularJS 绑定后获取元素的字符串长度
- 多窗口使用AngularJS绑定相同的数据
- AngularJS绑定函数到多个元素
- AngularJS:绑定到所有对象属性
- Angularjs 绑定到 JSON 会将值设置为 undefined
- Angularjs 绑定在从 ng-click 调用时不起作用
- AngularJS绑定到嵌套模型属性