Я работаю над одностраничным приложением с угловым и мне нужно общаться между двумя разными директивами, которые в основном не имеют родительского отношения к потомкам.
В директиве A у меня есть 2 места, где мне нужно транслировать одно и то же событие из разных функций. А в директиве B написали $ lister для этого.
Теперь я замечаю, что всякий раз, когда callFirstFunc & вызывается в первый раз, слушатель будет вызываться один раз. После последующего вызова слушатель вызывается дважды, трижды и т. Д., Он продолжает расти.
Вызов callSecondFunc вызывается, когда callFirstFunc был выполнен, поэтому слушатель для этого также вызывается как много нет. раз прослушиватель для трансляции в callFirstFunc. Итак, почему слушатель не вызывается только один раз, почему несколько раз? Он зацикливается и увеличивается каждый раз.
Директива A:
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");
}
}
};
});
Директива 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
}
}
};
});
Возможный дубликат [AngularJs транслируемых повторения выполнения слишком много раз] (http://stackoverflow.com/questions/19553598/angularjs- broadcast-repeat-execution-too-many-times) – kinkajou