Я работаю над одностраничным приложением с angular, и мне нужно общаться между двумя разными директивами, которые в основном не имеют родительского дочернего отношения.
В Директиве А у меня есть 2 места, где мне нужно транслировать одно и то же событие из разных функций. И в Директиве B для этого написали $on listener.
Теперь я замечаю, что всякий раз, когда callFirstFunc и его трансляция вызываются в первый раз, слушатель будет вызываться один раз. При последующем вызове прослушиватель вызывается дважды, трижды и т. д., и он продолжает увеличиваться.
callSecondFunc вызывается, когда callFirstFunc был выполнен, поэтому прослушиватель для этого также вызывается как многие no. раз прослушиватель для трансляции в callFirstFunc. Итак, почему слушатель вызывается не только один раз, а несколько раз? Он зацикливается и увеличивается каждый раз.
Директива А:
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");
}
}
};
});
Директива Б:
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
}
}
};
});