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=[];
我已经为 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=[];