我有一个Angular.js应用程序,它在复杂的对象模型中执行大量的会计类型计算(收入,成本,利润等).对对象模型的任何部分的更改都需要重新执行所有计算.此外,对象模型的许多更改都可以使用绑定直接从我的模板中进行 - 不需要控制器来中间.
许多计算结果都需要向用户显示并有助于下游计算.例如,收入显示给用户,但也用于计算利润(也显示给用户).但是,在每个摘要周期中计算收入两次(这是一个复杂的计算)是没有意义的,因此明显的优化是在首次计算时进行记忆,然后在周期的持续时间内重复使用该记忆值.
问题是我需要在摘要周期的开头或结尾清除这些记忆.一种方法是控制器拦截每个可能的变化源,并在继续计算之前手动取消对象模型.相反,我更喜欢继续使用已设置的绑定.
据我所知,我需要的是一种了解摘要周期何时开始或何时完成的方法.当我收到此通知时,我可以重置备忘录.
该角$表的文档说:
如果您希望在调用$ digest时收到通知,则可以注册一个没有监听器的watchExpression函数.(由于watchExpression可以在检测到更改时每$摘要周期执行多次,因此请准备多次调用您的侦听器.)
这对我没用,因为在摘要周期的每次迭代中清除memoizations会破坏首先使用它们的目的.每个摘要周期我只需要一个通知.
我该怎么做,还是有其他方法来解决问题?
angularjs ×1