如何在角度js中停止广播事件?

时间:2015-12-24 06:34:36

标签: angularjs

如何在angularjs中停止广播事件?我有三个控制器嵌套。当我从ctrl1控制器广播事件时,ctrl2ctrl3控制器会听取此事件。我想从侦听器事件中停止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)
    });
}])

3 个答案:

答案 0 :(得分:1)

$scope.on返回一个可用于取消注册事件的函数。所以你可以这样做:

var deregisterKey = $scope.on('key', fn);

// stop listening
deregisterKey()

另请参阅:https://stackoverflow.com/a/14898795/3891533

答案 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