home wiki.fukuchiharuki.me
Menu

キーワード

  • AngularJS
  • ディレクティブ
  • イベントリスナ

したいこと

$on()を経由せずエレメントに直接追加したイベントリスナは手動で削除する必要があるっぽいです。

どうやって

「$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);
});

ちなみに

DataTablesにも同じようなことがあるらしい。

参考