web-dev-qa-db-ja.com

モデルが更新されたときにAngularJS $ digestが発生するのを防止/遅延できますか?

ダイジェストの発生を延期または遅延させる方法はありますか?

モデルに加えたい変更がたくさんありますが、モデルにすべての変更が加えられるまでダイジェストを起動したくありません。モデル上の一部のオブジェクトには、モデル上の他のオブジェクトを更新して変更するウォッチャーがあります。

理想的にはしたい

  • $ digestを停止します
  • モデルにすべての変更を加える
  • $ digestを開始します

$ digestはすべてのダーティオブジェクトを見つけて、ウォッチャーを起動します。

これに対する別の解決策は、$ digestを停止する代わりに、

  • ウォッチャーを削除します
  • モデルにすべての変更を加えます(ダイジェストは引き続き実行されます)
  • 削除されたウォッチャーを追加します

ウォッチャーを追加したら、ウォッチャーメソッドを実行して、モデルが正しい状態にあることを確認する必要があります。

2番目のオプションはハックのように思えます。

アイデア??

19
Brad8118

これはハックではありません。データセットが大きいと、ユーザーがテキストをすばやく入力したり、バックスペースを押したままにしたりすると、$ digestサイクルの実行が非常に遅くなる可能性があるためです。 $watch関数と$filter関数に注意するように、間違いなく パフォーマンスの微調整 を実行できますが、-を使用して$digestサイクルを遅らせる方がよい場合もあります。 デバウンス関数

13
Aaron Gray