12

ダイジェスト サイクルからスコープを削除する方法はありますか? つまり、スコープ ダイジェスト サイクルを一時停止/再開するには?

私の場合、すべてのページが既に読み込まれていますが、すべてが表示されているわけではありません。なので、見えないものは止めて無駄な処理をしないようにしたいと思います。を使いたくng-view + $routeありません。ディープリンクはしたくない/必要ありません。

このスレッドを見て、このフィドルにたどり着きました。おそらく機能しますが、かなり侵略的であり、フレームワークの更新にあまり適していません。

と のような他の解決策はあり$scope.suspend()ますscope.resume()か?それとも(フレームワークの観点から)より侵襲性の低いものですか?私は現在$destroy$compileサイクルについて考えています。

4

2 に答える 2

3

現在のフレームワークでは、スコープでダイジェストを一時停止/再開する方法はありません。とはいえ、ダイジェスト サイクルの一部として実行される監視の数を制限するために使用できる手法がいくつかあります。

まず第一に、とにかく画面の一部が隠されている場合、ng-switchファミリーのディレクティブを使用して、見えない部分を DOM から完全に削除できます。

次に、ダイジェスト サイクルがディレクティブ経由でトリガーされ、$applyウォッチの再評価を子スコープに限定したい場合は、$digest代わりに呼び出すことができます$apply

次に、はい、リンク先のディスカッションで説明されているように、スコープを破棄して再作成できます。ただし、すでに DOM の一部を隠している場合はng-switch、より良いオプションのように思えます。

于 2013-01-31T18:15:37.820 に答える