当我需要担心使用范围时,有人可以澄清。$ on(" destroy")

时间:2016-08-04 13:39:27

标签: angularjs angularjs-directive memory-leaks

我已经阅读了许多关于何时使用范围的文章。$ on(" $ destroy")但我还没有确定何时应用它实践。我不是在寻找"在这种情况下你会..."回答"我正在寻找澄清以了解自己何时(有/没有)担心应用它。

这里有我读过的几篇文章 Angular Documentation for scope
Always trigger the destroy event before removing dom elements
If a dom element is removed are it's listeners removed as well
How the destroy event affects the scope tree

给出一个非常简单的指令,它甚至没有自己的范围。该指令将项目滚动到屏幕并将其保留在那里。

angular.module("scrollIf").directive("scrollIf", ["$window", "$timeout",
    function ($window, $timeout) {
        "use strict";
        return {
            link: function (scope, element, attrs) {

                var css = attrs.scrollIf;
                var scrollElement = $window.document.getElementsByClassName(css)[0];

                var handler = element.on("click", function (event) {

                    scope.$parent.$digest(); //update everything first
                    $timeout(function () {

                        var elementViewPortTop = element[0].getBoundingClientRect().top + (element[0].getBoundingClientRect().height / 2);
                        var scrollPosition = scrollElement.scrollTop + (elementViewPortTop - event.clientY);

                        scrollElement.scrollTop = scrollPosition;
                    }, 1);

                });

            }
        };
    }]);

在这个例子中,我是否需要担心$ destroy?我将一个处理程序直接附加到dom,而不是范围。所以当父母被摧毁时,这个例子是在内存中留下没有引用的分离对象吗?

另外,为什么$scope.$on("click")element.on("click")不同?如果我使用controllerAs语法并绑定到控制器。我没有将$scope服务注入我的指令中。在这种情况下,$scope.$on与链接的scope.$on相同吗?

0 个答案:

没有答案