6

Я работаю над одностраничным приложением с угловым и мне нужно общаться между двумя разными директивами, которые в основном не имеют родительского отношения к потомкам.

В директиве 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 
       }      
      } 
     }; 
    }); 
+0

Возможный дубликат [AngularJs транслируемых повторения выполнения слишком много раз] (http://stackoverflow.com/questions/19553598/angularjs- broadcast-repeat-execution-too-many-times) – kinkajou

ответ

1

Я думаю, что вы забыли отвязать даже обработчик.

Вы можете сделать это следующим -

var someEventHandle = scope.$on("someEvent", function(){ 
 
        detectSTuff(); 
 
       }); 
 
scope.$on('$destroy', someEventHandle);

+4

Rabi - Я пробовал, но его все равно то же самое. Его прослушивание не раз и продолжает расти. – whyAto8

Смежные вопросы