如何在角度观察周期或消化周期完成时调用函数

时间:2015-03-17 07:10:47

标签: angularjs angularjs-scope

有角度完成所有观察周期之后,是否有任何方法可以在角度中调用自定义功能。

要求 我的控制器内有多个监视功能。现在我想在只有角度

执行所有监视功能后执行一个函数

1 个答案:

答案 0 :(得分:59)

摘要完成后,有几种方法可以注册回调。

使用$$postDigest $scope.$$postDigest在当前$digest周期完成后触发回调。

然而,这只在下一个摘要周期后运行一次。要使其在每个摘要周期后运行,请将其与$watch一起运行。这基于代码示例given here

var hasRegistered = false;
$scope.$watch(function() {
  if (hasRegistered) return;
  hasRegistered = true;
  $scope.$$postDigest(function() {
    hasRegistered = false;
    fn();
  });
});

$watch可能会在摘要周期中多次触发,因此我们使用标记hasRegistered来阻止多次注册$$postDigest回调。 注意:$$ postDigest不会触发另一个摘要周期。因此,对$scope内的$$postDigest的任何修改都不会反映在dom中。 $$表示这是angularjs中的私有函数,因此函数不稳定,将来可能会发生变化。

使用$timeout

$timeout(function(){
 console.log("Running after the digest cycle");
},0,false);

这在当前摘要周期完成后运行。 注意:第三个参数设置为false以防止另一个摘要周期触发。