Sto lavorando su un'applicazione a singola pagina, con angolare e ho bisogno di comunicare tra 2 direttive diverse che fondamentalmente non hanno una relazione genitore figlio.
Nella direttiva A, ho 2 posizioni in cui è necessario trasmettere lo stesso evento da diverse funzioni. E nella Direttiva B, ho scritto un ascoltatore su $ per questo.
Ora, osservo che ogni volta che si chiamaFirstFunc & la sua trasmissione viene chiamata per la prima volta, il listener verrà chiamato una volta. Alla successiva chiamata, l'ascoltatore viene chiamato due volte, tre volte e così via, continua ad aumentare.
CallSecondFunc viene chiamato quando è stato eseguito callFirstFunc, quindi l'ascoltatore per questo viene chiamato anche numero n. di volte l'ascoltatore per la trasmissione in callFirstFunc. Quindi, perché il listener non viene chiamato solo una volta, perché più volte? È in loop e aumenta ogni volta.
direttiva R:
app.directive("firstDir", function ($rootScope) {
return {
restrict: 'E',
link: function (scope, element, attrs) {
// some other code
callFirstFunc();
var callFirstFunc = function(){
// some other code
$rootScope.$broadcast("someEvent");
}
callSecondFunc();
var callSecondFunc = function(){
// some other code
$rootScope.$broadcast("someEvent");
}
}
};
});
direttiva B:
app.directive("secondDir", function ($rootScope) {
return {
restrict: 'E',
link: function (scope, element, attrs) {
// some other code
scope.$on("someEvent", function(){
detectSTuff();
})
function detectStuff(){
// other code
}
}
};
});
Eventuali duplicati di [AngularJs trasmessi a ripetere l'esecuzione troppe volte] (http://stackoverflow.com/questions/19553598/angularjs- broadcast-repeat-execution-too-many-times) – kinkajou