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
'programing' 카테고리의 다른 글
Spring Boot application.properties를 프로그래밍 방식으로 덮어쓰려면 어떻게 해야 합니까? (0) | 2023.04.01 |
---|---|
Spring MVC 컨트롤러 메서드에서 GET HTTP 요청의 파라미터 값을 취득하려면 어떻게 해야 합니까? (0) | 2023.04.01 |
오류: $digest가 이미 진행 중입니다. (0) | 2023.04.01 |
IN 절의 SQL 다중 열 (0) | 2023.03.27 |
어제 레코드만 선택하려면 어떻게 해야 하나요? (0) | 2023.03.27 |