2017-08-14 4 views
0

私は角度リスナー($scope.$on)が$ destroyによって自動的に削除されていることを読んだことがあります。また、jQuery($(document).on)のような外部イベントハンドラを手動で削除する必要があることも読んでいます。

angle.elementがこのパラダイムに該当する場所は誰にでも分かりますか?

チームメンバーはangular.element(document).on('event',() =>);のようなものを書いています。 $onDestroyでこのイベントを手動で削除する必要がありますか?

答えて

1

angular.element (jqLite)は、AngularJSがブラウザ間で互換性のある方法でDOMを操作できるjQueryの、小さなAPI互換サブセットです。 jqLiteは、フットプリントが非常に小さいという目的で最も一般的に必要な機能のみを実装しています。

Directive link functionsディレクティブ要素が破棄されたときに、ディレクティブ自身の要素以外の要素にイベントリスナーをアタッチすると、それらのリスナーの登録を解除する必要があります。

function postLink(scope, elem, attrs) { 

    $document.on('event', documentEventHandler); 

    scope.$on("$destroy", function() { 
     $document.off('event', documentEventHandler); 
    }); 

    function documentEventHandler(event) { 
     console.log(event.target); 
     //other code here 
    }); 
} 

代わりangular.element(document)を使用するAngularJS $document Serviceを注入し、ユニットテストを容易にします。

+0

ありがとうございました。 – user2954463

関連する問題