我已经阅读了许多关于何时使用范围的文章。$ 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
相同吗?