我在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