programing

AngularJs가 반복 실행을 너무 많이 브로드캐스트합니다.

mailnote 2023. 4. 1. 09:41
반응형

AngularJs가 반복 실행을 너무 많이 브로드캐스트합니다.

Angular 컨트롤러 중 하나에 다음과 같은 기능이 있습니다.

// controller A
$rootScope.$on("myEventFire", function(event, reload) {
    someAction();
});

다른 컨트롤러에는 다음과 같은 기능이 있습니다.

// controller B
$scope.openList = function(page) {
    $rootScope.$broadcast('myEventFire', 1);
}

이것은 한 페이지짜리 앱입니다.처음에 컨트롤러 A에 접속하여 이 이벤트를 트리거하면 someAction()이 한 번 실행됩니다.컨트롤러 A로 돌아와 같은 작업을 하면 someAction()이 두 번 실행됩니다.다시 하면 세 번 반복됩니다.내가 여기서 뭘 잘못하고 있는 거지?

그냥 써볼래?$scope.$on()컨트롤러 A가 생성될 때마다 루트 스코프에 새로운 청취자가 추가되며, 이 청취자는 네비게이트를 실행해도 파괴되지 않습니다.컨트롤러의 로컬 스코프에서 이 작업을 수행할 경우 다른 곳으로 이동하여 스코프가 파괴되면 리스너가 삭제됩니다.

// controller A
$scope.$on("myEventFire", function(event, reload) {
    someAction();
});

$broadcast는 이벤트를 모든 자 스코프로 하향 전송하므로 로컬스코프에서 이벤트를 픽업해야 합니다. $emit루트 스코프를 향해 부글부글 끓어오릅니다.

스코프가 파괴되었을 때 $rootScope에서 리턴 콜백을 실행하여 삭제할 수도 있습니다.$120

예.

var destroyFoo;

destroyFoo = $rootScope.$on('foo', function() {});

$scope.$on('$destroy', function() {
  destroyFoo(); // remove listener.
});       

파괴하고 싶지 않다면

먼저 청취자 이벤트를 확인할 수 있을 것 같습니다 - AngularJS 1.2.15

수신기 이벤트 확인 - 예

그래서 저는 이게 효과가 있을 거라고 생각합니다.

if(!$rootScope.$$listenerCount['myEventFire']){
    $rootScope.$on("myEventFire", function(event, reload) {
        someAction();
    });
}

만약 그것이 누군가에게 도움이 된다면 나는 지침에서 비슷한 문제가 있었다.지시문이 열릴 때마다 이벤트가 발생하는 횟수가 증가했습니다.

다음을 사용하여 해결했습니다(컨트롤러 초기화 기능 중이었는데 컨트롤러 자체에서 정의되었을 수도 있습니다).내 경우 컨트롤러는 이벤트 발생 시 재초기화가 필요했습니다.)

 if (!$scope.onMyEvent) $scope.onMyEvent= $scope.$on('myEvent',function(event,data){
        .....
        });

저 같은 경우에는...

if ($rootScope.$$listenerCount['myEventFire']) {
    $rootScope.$$listeners.broadcastShowMessageError = [];
};

$rootScope.$on('myEventFire', function (event, reload) {
    someAction();
})

언급URL : https://stackoverflow.com/questions/19553598/angularjs-broadcast-repeating-execution-too-many-times

반응형