2015-12-24 3 views
0

Как остановить трансляцию событий в angularjs? У меня три контроллера вложенные. Когда я транслировал событие с контроллера ctrl1, контроллеры ctrl2 и ctrl3 прослушивают это событие. Я хочу остановить контроллер ctrl3 от слушателя. Как это сделать?Как остановить трансляцию событий в угловых js?

<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

Просто отмените регистрацию, чтобы послушать это событие. –

+0

как отменить регистрацию события @Ashish Kumawat – bharath

+0

// подписывается ... var myListener = $ scope. $ On ('child', function (event, data) { // сделать что-то }); // unsubscribes ... // это, вероятно, сидит в обратном вызове или что-то myListener(); –

ответ

1

$scope.on возвращает функцию, которую вы можете использовать, чтобы отменить регистрацию события. Так что вы можете сделать что-то вроде этого:

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

// stop listening 
deregisterKey() 

Смотрите также: https://stackoverflow.com/a/14898795/3891533

0

Перед тем, как позвонить alert(message) попробовать установить это ...

event.defaultPrevented = true; 

трансляция не имеет метод stopPropagation вот почему вас необходимо использовать defaultPrevented

1
// subscribes... 
    var myListener = $scope.$on('child', function (event, data) { 
    // do something 
    }); 

    // unsubscribes... 
    // this would probably sit in a callback or something 
    myListener(); 

Чтобы отказаться от подписки на прослушивание.

Смежные вопросы