- 追加された行はこの色です。
- 削除された行はこの色です。
- AngularJS/イベントリスナを手動で削除する へ行く。
- AngularJS/イベントリスナを手動で削除する の差分を削除
#author("2017-12-01T08:15:32+00:00","default:haruki","haruki") #author("2017-12-04T06:37:33+00:00","default:haruki","haruki") * キーワード [#neacf127] - AngularJS - ディレクティブ - イベントリスナ * したいこと [#d19b9598] $on()を経由せずエレメントに直接追加したイベントリスナは手動で削除する必要があるっぽいです。 * どうやって [#ze5953ef] 「$destroy」イベントを拾って処理する。 element.on('click', function () { ... }); scope.$on('$destroy', function () { element.off(); }); $rootScopeに登録したリスナも片付ける必要があるようです。 const deregister = $rootScope.$on('anEvent', function () { ... }); scope.$on('$destroy', deregister); $timeoutでペンディング中のものもキャンセルするべきみたい。 const timer = $timeout(function () { ... }, 60000); scope.$on('$destroy', function () { $timeout.cancel(timer); }); * ちなみに [#n1b472ef] DataTablesにも同じようなことがあるらしい。 * 参考 [#laead680] - [[memory leaks - AngularJS - Does $destroy remove event listeners? - Stack Overflow>https://stackoverflow.com/questions/26983696/angularjs-does-destroy-remove-event-listeners]] - [[Possible memory leak when refreshing table - DataTables forums>https://datatables.net/forums/discussion/35701/possible-memory-leak-when-refreshing-table]]