我在Angular WebApp中使用socket.io
客户端。我把它包装在一个服务中,但这可能不一定有兴趣。但是,由于输入的数据与使用该服务的控制器的范围不同,我总是需要拨打$scope.$apply
。更糟糕的是,我发现了一些情况(在连接/重新连接期间),我必须使用safeApply
,如here所述。
据我所知,这是一个Angular Anti-Pattern,但我没有看到解决方法。
是否有一个通用的方法来解决这个问题(最好是在服务中),不会污染控制器的很多$scope.$apply/safeApply
?
BR, 丹尼尔
这里也是一些代码,工作,但不是很好:
angular.module('mean')
.controller('ConnectionStateController', function ($scope) {
$scope.safeApply = function (fn) {
var phase = this.$root.$$phase;
if (phase == '$apply' || phase == '$digest') {
if (fn && (typeof (fn) === 'function')) {
fn();
}
} else {
this.$apply(fn);
}
};
var socket = io.connect('http://localhost:3000');
$scope.message = 'Not connected';
socket.on('connect', function() {
$scope.safeApply(function() {
$scope.message = "Connected";
});
});
});
哦,伙计。我仍然是一个小菜鸟。毕竟,我实际上并不知道如何在服务中使用'$ scope。$ apply'。把它放到'$ rootScope'似乎也不是一个很好的选择(我知道你们经常这样做),因为这可以被内部作用域的属性覆盖,对吧? – Daniel