how to call function when angular watch cycle or digest cycle is completed

痴心易碎 提交于 2019-12-12 09:32:33

问题


Is there any way to call custom function in angular after angular finishes all watch cycle.

Requirement I have multiple watch functions inside my controller. Now I want to execute a function only after all watch functions are executed by angular


回答1:


There are couple of ways to do register a callback once a digest is completed.

Using $$postDigest: $scope.$$postDigest fires a callback after the current $digest cycle completed.

However this runs only once after the next digest cycle. To make it run after each digest cycle run it along with $watch. This is based on the code sample given here

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

The $watch can get triggered multiple times during a digest cycle so we use a flag hasRegistered to prevent $$postDigest callback to be registered multiple times. Note: $$postDigest will not trigger another digest cycle. So any modifcation to $scope inside $$postDigest will not get reflected in the dom. $$ means this is a private function in angularjs, so the function is not stable and may change in the future.

Using $timeout:

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

This runs after the current digest cycle is complete. Note: The third argument is set to false to prevent another digest cycle trigger.



来源:https://stackoverflow.com/questions/29093229/how-to-call-function-when-angular-watch-cycle-or-digest-cycle-is-completed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!