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

Shi*_*mar 31 angularjs angularjs-scope

是否有任何方法可以在角度完成所有观察周期后调整角度自定义功能.

要求 我的控制器内有多个监视功能.现在我想在只有角度执行所有手表功能后执行一个功能

gur*_*uru 62

一旦摘要完成,有几种方法可以注册回调.

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

然而,这在下一个摘要周期后仅运行一次.为了使它在每个摘要周期后运行,同时运行它$watch.这是基于此处给出的代码示例

var hasRegistered = false;
$scope.$watch(function() {
  if (hasRegistered) return;
  hasRegistered = true;
  $scope.$$postDigest(function() {
    hasRegistered = false;
    fn();
  });
});
Run Code Online (Sandbox Code Playgroud)

$watch所以我们用一个标志可以得到消化周期内多次触发hasRegistered,防止$$postDigest回调要注册多次.注意:$$ postDigest不会触发另一个摘要周期.所以对$scope内部的任何修改$$postDigest都不会反映在dom中.$$意味着这是angularjs中的私有函数,因此函数不稳定,将来可能会改变.

使用$timeout:

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

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