【问题标题】:How to stop broadcast event in angular js?如何在角度 js 中停止广播事件?
【发布时间】:2016-03-30 15:19:16
【问题描述】:

如何在 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)
    });
}])

【问题讨论】:

  • 只需注销即可收听该事件。
  • 如何取消注册活动@Ashish Kumawat
  • // 订阅... var myListener = $scope.$on('child', function (event, data) { // 做某事 }); // 取消订阅... // 这可能会放在回调或其他东西中 myListener();

标签: angularjs


【解决方案1】:

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

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

// stop listening
deregisterKey()

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

【讨论】:

    【解决方案2】:
    // subscribes...
      var myListener = $scope.$on('child', function (event, data) {
        // do something
      });
    
      // unsubscribes...
      // this would probably sit in a callback or something
      myListener();
    

    取消订阅监听事件。

    【讨论】:

      【解决方案3】:

      在致电alert(message) 之前,请尝试设置此...

       event.defaultPrevented = true; 
      

      Broadcast 没有 stopPropagation 方法,所以你必须使用defaultPrevented

      【讨论】:

        猜你喜欢
        • 2018-01-08
        • 2018-09-23
        • 2018-10-18
        • 2011-01-05
        • 1970-01-01
        • 2016-05-03
        • 2011-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多