2017-05-18 20 views
-1

メモリリークを防ぐため、スコープを破棄する際にanglejsウォッチャーを登録解除するには、 プロセス(scope.watchを使用して登録)を支払うことはありますか? on( "$ destroy")イベントですべての手動ウォッチャーの登録を解除するよう伝えられている人がいます。Angularjs - ウォッチャーの登録解除

たとえば、角度ルーティングで別のページに移動すると、すべてのウォッチャが自動的に角をなして解放され、フリーズする心配はありません。

スコープが与えられたスコープを破棄してメモリリークが発生した後で、登録済みのウォッチャーが解放されていないことはありますか?いいえ、ありがとうございます。

1つの問題私は、ウォッチャーの手動による登録解除によってコードが乱雑になることがわかりました。

答えて

1

$ watchが多すぎると、ウェブページ(特にモバイルデバイス)のパフォーマンスに関する問題が発生する可能性があります。無関係な$ watchを削除してアプリケーションを高速化する方法について説明します。

$ watchは、不要になったときに無効にすることができます。したがって、$ watchリストから$ watchを削除する時期を自由に選択できます。

の例を見てみましょう:

ファイル:

<body ng-controller="MainCtrl"> 
    <input type="text" ng-model="text" /> {{updated}} times updated. 
    <button ng-click="stop()">Stop count</button> 
</body> 

$の時計機能自体のindex.html:

app = angular.module('app', []); 

app.controller('MainCtrl', function($scope) { 
    $scope.updated = 0; 

    $scope.stop = function() { 
    textWatch(); 
    }; 

    var textWatch = $scope.$watch('text', function(newVal, oldVal) { 
    if (newVal === oldVal) { return; } 
    $scope.updated++; 
    }); 
}); 

ファイルをapp.js関数を返すイオンが呼び出されたときに$ watchをアンバインドします。だから、$ watchがもはや必要でなくなったら、$ watchが返す関数を呼び出すだけです。

+0

問題は角度の書類にはウォッチャーを登録解除する必要がないと言われていますが、角度は私たちのために行います。 私はメモリリークの観点から問題を見ています。ウォッチャーを解放することでパフォーマンスが向上することを理解しています。 たとえば、私たちがルーティングの別のページに移動するときにメモリリークの観点から問題がありますか。 –

関連する問題