각도 웹 애플리케이션에 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