Events are managed very differently by browsersであり、基本的にはイベントループで処理されます。
ブラウザが内部ループを持っている、キュー をチェックし、イベントを処理イベントループ、と呼ばれる、などの機能を実行
だから、setTimeout
/setInterval
のような任意の非同期イベントを追加するたびに、彼らイベントループにハンドラが追加されます。
これらの非同期イベントをstop/de-register
にする場合は、手動で登録を解除する必要があります。ここでは、そのsetInterval
オブジェクト参照でclearInterval
メソッドを呼び出す必要があります。イベントはEvent Loop
から削除されます。
ライフサイクルフックngOnDestroy
を使用して、コンポーネントを破壊する前に自分のものを持てるようにすることができます。
//hook gets called before Component get destroyed or you can say disposed.
ngOnDestroy(){
clearInterval(intervalReference)
}
余分なもの(角1と比較すると)
あなたはどのJavascriptのフレームワークで見ることができ、問題の同じ種類。角度1では、この種の状況を処理する方法があります(A1
とA2
を比較することによって、Angular 1
の背景の誰でも簡単にこの概念を得ることができるように、このようなものを追加します)。 controller
インスタンスを内部的に破棄すると、その要素のelement
& $scope
以上のイベントが発生しますが、内部では$destroy
イベントが発生します。したがって、リスナーを$destroy
イベント以上にすることによって、私たちはこれらのオブジェクトvalue/object/events
が使用できないようにするために物事をしました。
$scope.$on('$destroy', function(event){
//do stuff here
})
element.bind('$destroy', function(event){
//do stuff here
})