私は、複雑なオブジェクトモデル全体にわたって、アカウンティングタイプの計算(収益、費用、利益など)の大きなセットを実行するAngular.jsアプリケーションを持っています。オブジェクトモデルの任意の部分を変更するには、すべての計算を再実行する必要があります。さらに、オブジェクトモデルへの変更の多くは、バインディングを使用してテンプレートから直接作成することができます。コントローラを中間体にする必要はありません。Angular.jsダイジェストサイクルが開始(または終了)するタイミングを知る方法を教えてください。
多くの計算結果をユーザに表示する必要があります。およびは、下流計算に役立ちます。たとえば、収益はユーザーに表示されますが、収益(ユーザーにも表示されます)を計算するためにも使用されます。しかし、各ダイジェストサイクルで2回の収入計算(複雑な計算)は必要ありません。そのため、最初に計算されたときにメモをとり、サイクルの間このメモに記録された値を再利用するのが最適です。
問題は、ダイジェストサイクルの開始時または終了時にこれらのメモをクリアする必要があることです。 1つのアプローチは、コントローラが、計算を進める前に、可能なすべての変化の原因を傍受し、手動でオブジェクトモデルをアンメソイズすることです。代わりに、私はずっと設定されているバインディングを使い続けたいと思っています。
私が知る限り、ダイジェストサイクルが開始されているか、終了したかを知る方法が必要です。この通知を受けると、私はメモをリセットすることができます。
Angular $watch documentationは言う:
あなたは$ダイジェストが呼ばれるたびに通知を受けたい場合は、あなたがいないリスナーにwatchExpression関数を登録 することができます。 ( watchExpressionが 変更が検出されたときにサイクルを消化$ごとに複数回実行することができますので、あなたのリスナーへの複数の呼び出しのために準備すること。)の各反復にmemoizationsをクリアするため
これは私に何を使用していませんダイジェストサイクルは最初にそれらを持つという目的を破るでしょう。私はただダイジェストサイクルごとに通知する必要があります。
これを行うにはどうすればよいですか、または問題を解決する別の方法がありますか?
_ "これらのメモをクリアする必要があります..." - なぜですか? – Stewie
'問題を解決するための代替アプローチがありますか...実際の問題が何であるかはっきりしていません – charlietfl
このコストなどを計算するサービスを作成し、手動で計算メソッドを呼び出すとどうなりますか? –