Question

J'ai une directive ci-dessous et je me demande si cela provoquera une fuite de mémoire lorsque le composant est retiré de la DOM.Angulaire fait tellement de merde 'sous la cagoule' que je ne peux pas dire si JS / GC angulaire prendra en charge cela.(Et j'essaie toujours de comprendre le profileur JS dans des outils chromés pour pouvoir comprendre cela moi-même).Ainsi, toute personne avec ce type d'expérience peut répondre à cela?

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);                             

            }
        }
    }]);

Le code ci-dessus provoquera-t-il une fuite de mémoire lorsque l'élément est retiré de DOM?Je veux dire que je sais que je pourrais facilement améliorer cela pour ajouter un événement $ détruit: c'est-à-dire:

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

Mais cette étape supplémentaire est-elle nécessaire ou angulaire en soin de toute façon?

Merci pour une aide!

Était-ce utile?

La solution

Vous n'avez pas besoin de faire cette étape, lorsque la portée est détruite, tous les auditeurs seront détruits également.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top