摘要完成后,有几种方法可以注册回调。
使用$$ 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不会触发另一个摘要循环。所以对$$ postDigest中的$ scope的任何修改都不会反映在dom中。 $$意味着这是一个角色角色中的私有功能,所以功能不稳定,将来会发生变化。
使用$ timeout:
$timeout(function(){ console.log("Running after the digest cycle"); },false);