【发布时间】:2015-02-26 04:47:16
【问题描述】:
我不太确定标题是否是最好的描述,但我想知道如果我有一些发生在 Angular 摘要循环之外的事件来触发摘要循环,最好的方法是什么?在我正在处理的应用程序中,我使用 Socket.io 从网络中的其他应用程序来回传递数据。来自 Socket.io 的一些事件可用于更新当前控制器 $scope 内的模型。但是,在出现摘要循环之前,这些更改不会反映在 UI 中。最好我不必调用 $scope.$apply() 来防止遇到 Angular 已经处于循环中的问题。
我知道我可以使用 $timeout() 并将我的函数放在那里并将超时设置为 0 秒。这就是我目前正在使用的,它工作正常,但我想知道这是否是最好的方法?
示例 JS
var app = angular.module('MyApp',[]);
var socket = io.connect('http://localhost:3000');
app.controller('MyAppController',['$scope',function($scope) {
$scope.connections = 0;
socket.on('connect',function(sock) {
sock.on('event',function() {
$scope.connections++;
};
};
}]);
示例 HTML
<!DOCTYPE html>
<html lang="en" ng-app="MyApp">
<head></head>
<body ng-controller="MyAppController">
<p>Connections: {{connections}}</p>
<script src="angular.min.js"></script>
</body>
</html>
显然,这是一个非常精简、尽可能基本的示例。这不是实际使用的代码,而是代表相同的问题。当从 socket.io 引发事件时,$scope.connections 变量会增加,但 UI 不会反映更改,直到其他东西触发摘要循环,调用 $scope.$apply(),或者我使用 $timeout ()。
再一次,我有有效的代码,只是想知道最好的方法是什么。
谢谢
【问题讨论】:
标签: javascript angularjs