2016-10-05 1 views
1

J'ai 2 différents contrôleurs angulaires et l'une d'elle ayant diffusé comme celui-ci

$timeout(function() { 
    if($scope.modal){ 
     $rootScope.$broadcast(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST,id); 
     $scope.modal.hide(); 
     $scope.modal.remove(); 
    } 
}, 3000); 

Et dans un autre contrôleur je capture la diffusion.

$scope.$on(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST,function(event,id){ 
    // some action 
}); 

problème est portée de $. Fonction $ sur s'appelé 3 fois. J'ai parlé

mais n'a pas pu obtenir la solution de les utiliser. Sil te plait aide moi...!!

+2

Quel est le contexte de cet appel '$ timeout'? Qu'est-ce qui provoque l'exécution? – Phil

+0

Pouvez-vous poster votre HTML comment vous chargez vos différents contrôleurs! Si vous avez initié le même contrôleur plus d'une fois, ce problème est possible. –

+0

Droit .... @ Angular_10 son passe à cause de plusieurs contrôleurs sont chargés à un moment donné. Je suis toujours en train de regarder comment cela se passe ... –

Répondre

0

Pour fixer problème pour un moment, je l'ai fait quelque chose comme suit,

if(!$rootScope.$$listenerCount[DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST]){ 
    $scope.$on(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST,function(event,id){ 
     // some action 
    }); 
} 

Mais très bientôt, je trouve que j'ai initialisé mon contrôleur à plusieurs reprises et j'ai pris des mesures correctives pour éliminer les multiples déclarations de contrôleur.

1

bidouille rapide et sale: utiliser un drapeau booléen

var once = true; 
$timeout(function() { 
    if($scope.modal){   
     $rootScope.$broadcast(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST, {id: id, once: once}); 
     $scope.modal.hide(); 
     $scope.modal.remove(); 
     once = false; 
    } 
}, 3000); 

et dans votre écouteur:

$scope.$on(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST,function(event,args){ 
    if(args.once) 
     // some action, only the first time 
}); 

Gardez à l'esprit c'est (sale, mais quand même) solution que si vous ne pouvez pas Trouvez pourquoi votre diffusion est appelée 3 fois chaque événement.

+0

Merci @Luxor, cela ne s'est produit que pour cet événement et c'est à cause des contrôleurs que j'ai utilisés dans mon modèle d'en-tête. Maintenant tout va bien. Le problème a été résolu maintenant. –