programing

각도 $rootScope.$broadcast() 이벤트가 컨트롤러에서 두 번 적발됨

css3 2023. 10. 17. 20:27

각도 $rootScope.$broadcast() 이벤트가 컨트롤러에서 두 번 적발됨

버튼 클릭시 방송 이벤트 :-

$scope.onButtonClick = function(){
    $rootScope.$broadcast('onButtonClick');
}

다른 컨트롤러에서 이벤트 잡기 :-

$rootScope.$on('onButtonClick',function(event){
  alert("catched");
  console.log(event);
});

하지만 한 번만 발사했는데도 두 번이나 잡혔습니다.왜 그런 것일까요?

결과적으로 다중 컨트롤러는 다음과 같은 이유로 인스턴스화되었습니다.ng-controllerhtml의 선언과 또한 상태 설정의 일부로서ui-router.

해결책은 선언문 중 하나를 삭제하는 것입니다.

이벤트를 방송하는 경우$rootScope, 각 컨트롤러에서 이벤트를 잡을 수 있습니다.$scope. IMO 당신은 이벤트를 잡지 말아야 합니다.$rootScope.

$scope.$on('onButtonClick',function(event){
  alert("catched");
  console.log(event);
});

플렁커 쇼케이스를 만들었는데, 예상했던 대로 작동한다는 걸 보여줍니다.플렁커

이벤트를 포착하는 동일한 컨트롤러의 인스턴스가 여러 개 있을 수 있습니다.Chandermani가 제안한 대로 확인 부탁드립니다.

각진$rootScope.$broadcast()컨트롤러에 이벤트가 두 번 잡혔습니다.

$scope.$on('saveCancelLeadInfo', function (event, args) {
    if ($scope.$$listenerCount["saveCancelLeadInfo"] > 1) {
        $scope.$$listenerCount["saveCancelLeadInfo"] = 0;
    }
    your code here
});

언급URL : https://stackoverflow.com/questions/25788032/angular-rootscope-broadcast-event-caught-twice-in-controller