如何在angularjs中停止广播事件?我有三个控制器嵌套。当我从ctrl1
控制器广播事件时,ctrl2
和ctrl3
控制器会听取此事件。我想从侦听器事件中停止ctrl3
控制器。怎么做?
<div ng-controller="ctrl1" ng-click="ad2()">
<div ng-controller="ctrl2">
<div ng-controller="ctrl3">
</div>
</div>
</div>
studentReport.controller("ctrl1",["$scope",function($scope){
$scope.ad2 = function(){
$scope.$broadcast("text","hi");
}
}])
studentReport.controller("ctrl2",["$scope",function($scope){
$scope.$on("text",function(event,message){
alert(message)
});
}])
studentReport.controller("ctrl3",["$scope",function($scope){
$scope.$on("text",function(event,message){
alert(message)
});
}])
答案 0 :(得分:1)
$scope.on
返回一个可用于取消注册事件的函数。所以你可以这样做:
var deregisterKey = $scope.on('key', fn);
// stop listening
deregisterKey()
答案 1 :(得分:1)
// subscribes...
var myListener = $scope.$on('child', function (event, data) {
// do something
});
// unsubscribes...
// this would probably sit in a callback or something
myListener();
取消订阅听力活动。
答案 2 :(得分:0)
在致电alert(message)
之前,请尝试设置此...
event.defaultPrevented = true;
广播没有stopPropagation方法,这就是为什么你必须使用defaultPrevented