2014-06-03 3 views
0

У меня есть директива ниже и задаюсь вопросом, приведет ли это к утечке памяти при удалении компонента из DOM. Угловая делает так много дерьма под капотом, что я не могу сказать, позаботится ли об этом JS/Angular GC. (И я все еще пытаюсь понять JS Profiler в Chrome Tools, чтобы понять это сам). Итак, любой человек с таким опытом может ответить на это?Angular.js - будет ли эта директива причиной утечки памяти?

angular.module('myApp') 
    .directive('myDir', [function() { 
     return { 
      restrict: 'AE', 
      replace: true, 
      scope: { 
       someEvent:'@' 
      }, 
      transclude: 'element', 
      template: function(tElement, tAttrs) { 
       return '<div class="">' + 
        '<div ng-transclude ng-click="blah()" class=""></div>' 
        '</div>'; 
      }, 
      link: function (scope, el) { 

       scope.doSomething = function(){ 
        ..... 
       } 

       scope.$on(scope.someEvent, scope.doSomething);        

      } 
     } 
    }]); 

Приведенный выше код вызывает утечку памяти при удалении элемента из дома? Я имею в виду, я знаю, что я мог бы легко увеличить это добавить $ уничтожить событие: IE:

var unregister = scope.$on(scope.someEvent, scope.doSomething); 
scope.$on("$destroy",function() { 
      unregister();      
}); 

Но этот дополнительный шаг необходимо или делает Угловое уход тейк это так или иначе?

Спасибо за помощь!

ответ

1

Вам не нужно делать этот шаг, когда область действия уничтожена, все слушатели на ней также будут уничтожены.

+0

спасибо, что помогает :) – 29er

+0

только $ on будет очищен. любые вызовы jQuery.on вы должны очистить самостоятельно. – Berty

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