Ionic / Angular: 监听一次 EventListener

Ionic / Angular: Listen once to EventListener

我已经为 Ionic 实现了 Admob Pro plugin 并且想要收听 onAdDismiss-EventListener。我现在遇到的问题是,每次我使用控制器打开视图(需要 EventListener 的地方)时,都会将此 EventListener 添加到 $scope。怎么听一遍就删了?

myApp.run(function($ionicPlatform, $cordovaGoogleAnalytics, $cordovaDevice, $ionicHistory, $rootScope) {
  var self = this;
  $ionicPlatform.ready(function() {
    document.addEventListener('onAdDismiss', function(e){
      $rootScope.$broadcast("adDismissed");
    });
  }
});

myApp.controller('quizController', ['$scope', '$rootScope', '$cordovaAdMob', function($scope, $rootScope, $cordovaAdMob) {
   var self = this;

   this.checkAnswer = function(){ ... };

   $rootScope.$on('adDismissed', function(){
      self.checkAnswer(true);
   });
}]);

编辑:我已经用 removeEventListener 试过了,但这不起作用。

通过调用侦听器函数,您将能够销毁它。如下:

var adDismissedListener = $rootScope.$on('adDismissed', function(){
      self.checkAnswer(true);
      adDismissedListener(); // Will destroy the listener.
   });

https://docs.angularjs.org/api/ng/function/angular.bind

通过一些谷歌搜索,我发现您还可以 运行 在创建侦听器之前使用这段代码。

$rootScope.$$listeners.nameOfYourEvent=[];