【问题标题】:AngularJS "cron jobs" - run action on every $digestAngularJS “cron 作业” - 对每个 $digest 运行操作
【发布时间】:2014-01-22 15:24:04
【问题描述】:

我想在每个$digest 循环中执行一些函数。

$scope 的文档如下:

如果您想在调用 $digest 时收到通知,您可以 注册一个没有监听器的 watchExpression 函数。 (自从 watchExpression 可以在每个 $digest 周期执行多次,当 检测到变化,准备好多次调用你的监听器。)

那是否意味着可以通过这种方式完成:

$rootScope.$watch(function () {
  // Cron job
});

我不确定每个$digest 循环是否都会命中$rootScope,或者它是否甚至是从$rootScope 发出的。我只知道只有 1 个 $digest 循环,每次 $watch 检测到更改时都会发生。

【问题讨论】:

标签: angularjs angularjs-scope


【解决方案1】:

问:那么这是否意味着可以通过这种方式完成?

答:是的,尽管某些指令/服务可能会选择仅消化其本地范围以提高性能。

也就是说,建议在摘要循环中执行尽可能少的代码。

digest 不像 cron 作业,它不会每 x 秒自动运行一次。
它在您调用 $scope.$apply() 或发生诸如 ng-click 或 $http.get 之类的事件时运行。

【讨论】:

  • 感谢您的及时答复。你也让我很好奇 - 消化本地范围和相反有什么区别?
  • 当您确定只有 $scope 或其子范围发生了变化时,您可以调用 $scope.$digest。与 $scope.$apply 相比,这限制了脏检查,$scope.$apply 对所有 $scope 进行脏检查,另外还有 $eval()s 参数。
猜你喜欢
  • 2012-01-11
  • 1970-01-01
  • 2016-09-22
  • 2011-03-20
  • 2012-08-09
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
相关资源
最近更新 更多