Я не совсем уверен, что название - лучшее описание, но мне было интересно, какой будет лучший метод, если бы у меня было какое-то событие, которое происходит за пределами цикла Angular digest, вызвать цикл дайджеста? В приложении, над которым я работаю, я использую Socket.io для передачи данных взад и вперед от других приложений в сети. В Socket.io есть некоторые события, которые могут использоваться для обновления моделей в текущей области Контроллеры. Эти изменения не отражаются в пользовательском интерфейсе до тех пор, пока не произойдет цикл дайджеста. Предполагается, что мне не нужно вызывать $ scope. $ Apply(), чтобы избежать проблем с Angular, которые уже находятся в цикле.AngularJS - Лучший способ вызвать дайджест извне 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>
Очевидно, что это очень раздели вниз, как основным, как возможный пример. Это не используемый код ACTUAL, но представляет ту же проблему. Когда событие возникает из socket.io, переменная $ scope.connections увеличивается, но пользовательский интерфейс не отражает изменения до тех пор, пока что-то еще не вызывает цикл дайджеста, $ scope. $ Apply() вызывается или я использую $ timeout().
Еще раз, у меня есть код, который работает, просто интересно, какой лучший подход к этому.
Благодаря