私のAngularアプリには、ディレクティブがあります。これを DOM 操作 (jQuery empty() など) で削除すると、destroy イベントは呼び出されません。
myApp.directive('joe', function()
{
return {
restrict: 'E',
replace: true,
link: function(scope, element, attrs)
{
element.html("Hi !");
element.bind('$destroy', function()
{
console.log("Bye");
});
}
};
});
デモ: http://jsfiddle.net/ymx4N/
さらに、このディレクティブを empty() & appendTo() で何度も削除して追加すると、ノードの数は常に増加します。これは、すべてのディレクティブが常にメモリ内にあり、ガベージ コレクターがこれらのノードを削除しないことを意味します。
AngularJS は DOM ノードを直接削除/変更するタイミングを認識できないため、これは「通常の」動作である可能性があります。ただし、ディレクティブを明示的に破棄することは可能ですか? この種の """メモリ リーク""" を発生させずに、DOM 操作によってディレクティブを追加および削除するにはどうすればよいでしょうか?
ありがとう !