각도 $rootScope.$broadcast() 이벤트가 컨트롤러에서 두 번 적발됨
버튼 클릭시 방송 이벤트 :-
$scope.onButtonClick = function(){
$rootScope.$broadcast('onButtonClick');
}
다른 컨트롤러에서 이벤트 잡기 :-
$rootScope.$on('onButtonClick',function(event){
alert("catched");
console.log(event);
});
하지만 한 번만 발사했는데도 두 번이나 잡혔습니다.왜 그런 것일까요?
결과적으로 다중 컨트롤러는 다음과 같은 이유로 인스턴스화되었습니다.ng-controller
html의 선언과 또한 상태 설정의 일부로서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
'programing' 카테고리의 다른 글
UIVisual EffectView(UI 시각 효과 보기) 및/또는 UIBlurEffect(UI블러 효과)를 안팎으로 페이드하는 방법은 무엇입니까? (0) | 2023.10.17 |
---|---|
CodeIgniter를 사용하여 mysql 데이터베이스에서 랜덤 레코드 (0) | 2023.10.17 |
Angular Js1.2에서 리디렉션을 방지하는 방법 (0) | 2023.10.17 |
JS 개체에 키가 있는지 확인 (0) | 2023.10.17 |
같은 디브에 있는 두 개의 버튼 사이에 공간을 어떻게 만들 수 있습니까? (0) | 2023.10.17 |