AngularJS에서 $broadcast 이벤트를 중지하려면 어떻게 해야 합니까?
정지할 수 있는 방법이 있나요?$broadcast
어떤 이벤트가 발생합니까?
에 의해 전달된 이벤트 오브젝트$broadcast
이벤트에는 다음이 없습니다.stopPropagation
method ($rootScope에 기재되어 있는 문서)그러나 이 병합된 풀 요청은 다음을 나타냅니다.$broadcast
이벤트에는stopPropagation
그들을 방문했습니다.
angularJS 1.1.2 소스 코드 조각:
$emit: function(name, args) {
// ....
event = {
name: name,
targetScope: scope,
stopPropagation: function() {
stopPropagation = true;
},
preventDefault: function() {
event.defaultPrevented = true;
},
defaultPrevented: false
},
// ....
}
$broadcast: function(name, args) {
// ...
event = {
name: name,
targetScope: target,
preventDefault: function() {
event.defaultPrevented = true;
},
defaultPrevented: false
},
// ...
}
보시다시피 $broadcast 이벤트 오브젝트에는 stopPropagation이 없습니다.
stopPropagation 대신 preventDefault를 사용하여 이벤트를 "이 이벤트를 처리할 필요가 없습니다"로 표시할 수 있습니다.이렇게 하면 이벤트 전파가 중지되지는 않지만 하위 범위에 "이 이벤트를 처리할 필요가 없습니다"라는 메시지가 표시됩니다.
예: http://jsfiddle.net/C8EqT/1/
브로드캐스트에는 stopPropagation 메서드가 없기 때문에 defaultProvented 속성을 사용해야 합니다.재귀 디렉티브에서는 이 방법이 의미가 있습니다.
여기 이 플런커를 보세요.플런커
$scope.$on('test', function(event) { if (!event.defaultPrevented) { event.defaultPrevented = true; console.log('Handle event here for the root node only.'); } });
이 목적을 위해 이벤트도둑을 구현했습니다.
.factory("stealEvent", [function () {
/**
* If event is already "default prevented", noop.
* If event isn't "default prevented", executes callback.
* If callback returns a truthy value or undefined,
* stops event propagation if possible, and flags event as "default prevented".
*/
return function (callback) {
return function (event) {
if (!event.defaultPrevented) {
var stopEvent = callback.apply(null, arguments);
if (typeof stopEvent === "undefined" || stopEvent) {
event.stopPropagation && event.stopPropagation();
event.preventDefault();
}
}
};
};
}]);
사용 방법:
$scope.$on("AnyEvent", stealEvent(function (event, anyOtherParameter) {
if ($scope.keepEvent) {
// do some stuff with anyOtherParameter
return true; // steal event
} else {
return false; // let event available for other listeners
}
}));
$scope.$on("AnyOtherEvent", stealEvent(function (event, anyOtherParameter) {
// do some stuff with anyOtherParameter, event stolen by default
}));
언급URL : https://stackoverflow.com/questions/15420765/how-to-stop-broadcast-events-in-angularjs
'programing' 카테고리의 다른 글
TypeError: $scope.apply는 함수가 아닙니다. (0) | 2023.03.16 |
---|---|
반응 환원 용기 구성요소로 전달 소품 (0) | 2023.03.16 |
get_posts()에서 게시물 제외 (0) | 2023.03.16 |
Word press - 모든 투고를 나열합니다(reposition_pagination 포함). (0) | 2023.03.16 |
Jenkins 파이프라인 직렬화 가능예외: groovy.json.internal.레이지 맵 (0) | 2023.03.16 |