Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angularjs – 如何知道Angular.js摘要循环何时开始(或整理)?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Angular.js应用程序,在一个复杂的对象模型中执行大量的会计类型计算(收入,成本,利润等).对对象模型的任何部分的更改都需要重新执行所有计算.此外,对象模型的许多更改可以使用绑定直接从我的模板进行 – 无需控制器进行中间化.

许多计算结果都需要显示用户并对下游计算做出贡献.例如,收入显示用户,但也用于计算利润(也显示用户).然而,在每个摘要循环中计算收入两次没有意义(这是一个复杂的计算),因此明显的优化是在首次计算时记录,然后在循环持续时间内重用此记忆值.

问题是我需要在摘要循环的开始或结束时清除这些记忆.一种方法是控制器在进行计算之前拦截一个可能的变化源并手动取消对象模型的清除.相反,我更愿意继续使用已经设置的绑定.

据我所知,我需要的是一种知道摘要循环何时开始或何时完成的方法.当我收到此通知时,我可以重置记事本.

Angular $watch documentation说:

好的,我想我终于弄清楚了,所以以为我会回答我自己的问题.

一个名为$$postDigest的私有Angular方法将在下一个摘要循环结束后回调一个函数.但是,它只运行一次,如果你尝试让它重新计划自己的递归,它将进入一个无限循环.

解决这个问题,您可以将$$postDigest与常规的$watch结合使用.如果您有一个名为fn的函数,您希望控制器在每个摘要循环后调用,那么您可以向控制器函数添加如下内容

...
var hasRegistered = false;
$scope.$watch(function() {
  if (hasRegistered) return;
  hasRegistered = true
  // Note that we're using a private Angular method here (for Now)
  $scope.$$postDigest(function() {
    hasRegistered = false;
    fn();
  });
});
...

这是基于a code fragment by Karl Seamon.显然,在$范围内调用私有方法并不理想.希望这样一个$postDigestWatch方法可能最终被添加到Angular.

对于我原来的问题,对于您为什么要做这样的事情,有一些混淆:如果您还不清楚,请查看this blog post I wrote,以涵盖我的具体用例.

大佬总结

以上是大佬教程为你收集整理的angularjs – 如何知道Angular.js摘要循环何时开始(或整理)?全部内容,希望文章能够帮你解决angularjs – 如何知道Angular.js摘要循环何时开始(或整理)?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。