Angularjs 有必要在我的指令中包含销毁方法吗
我编写了一个非常简单的指令,在单击元素时添加/删除元素上的css类Angularjs 有必要在我的指令中包含销毁方法吗,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我编写了一个非常简单的指令,在单击元素时添加/删除元素上的css类 app.directive('dropdown', function() { var open = false, element, callback = function(){ open = !open; if (open) { element.addClass('open'); } else { element.r
app.directive('dropdown', function() {
var open = false, element,
callback = function(){
open = !open;
if (open) {
element.addClass('open');
} else {
element.removeClass('open');
}
};
return {
scope: {},
link: function(scope, elem){
element = elem;
elem.bind('click', callback);
scope.$on('$destroy', function(){
elem.unbind('click', callback);
elem.remove();
});
}
};
});
我认为$destroy方法可能没有必要。因为我使用了内置的jqlite,监听器将与元素一起销毁,对吗?调用elem.remove()还有什么好处吗。我在一些例子中看到过,但不确定是否有必要
有什么想法吗
C您肯定不必手动移除该元素。您也不需要从范围中解除任何绑定,因为它将由angularjs itsef处理 对于jquery dom侦听器: 如果您正在引用JQuery,angular将使用它而不是其内部jqLite实现。这意味着本机jquery remove方法将用于元素删除。remove的jquery文档说明: 与.empty()类似,.remove()方法从 多姆。如果要删除元素本身,也可以使用.remove() 就像里面的一切。除了元素本身,所有 与元素关联的绑定事件和jQuery数据将被删除 所以我认为你不需要解开听众的束缚
但我不是100%确定:)在您的情况下,您应该没事,因为事件绑定到被删除的元素,因此处理程序与元素本身一起被销毁。现在,如果您的指令将事件绑定到其自身DOM元素之外的父级,则需要在$destroy上手动删除该事件 然而,闭包可能会导致任何对象保持活动状态,所以这是您确实需要担心的事情。您可以引入一个新函数,该函数仍然引用您试图破坏其作用域的函数中的变量对象,从而阻止GC执行您可能希望它执行的操作。同样,这不会影响你当前的例子,但这是一个必须考虑的问题。