<!DOCTYPE html>
<html>
<head>
<link data-require="bootstrap-css@*" data-semver="3.0.3" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" />
<script data-require="angular.js@*" data-semver="1.2.8" src="http://code.angularjs.org/1.2.8/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-app="myApp">
<div class="container">
<div class="row">
<h1>AngularJS digest completed event</h1>
<p>
http://stackoverflow.com/questions/21138388/angular-js-identify-an-digest-complete-event-and-removing-from-url-in-angular#21138524
</p>
<p>See console output.</p>
</div>
<div class="row">
<div ng-controller="MyController">
<button class="btn btn-default" ng-click="triggerDigest()">Trigger</button>
<label>
<input type="checkbox" ng-model="queueSubDigest"/>
Queue subdigest
</label>
</div>
</div>
</div>
</body>
</html>
// Code goes here
var myApp = angular.module('myApp', []);
myApp.controller('MyController', function($scope, $timeout, $rootScope) {
$scope.count = 0;
$scope.subCount = 0;
function postDigest(callback) {
var unregister = $rootScope.$watch(function() {
console.log('tick', Date.now());
unregister();
$timeout(function() {
callback();
postDigest(callback);
}, 0, false);
});
}
postDigest(function() {
console.log('Post digest cycle', 'count ' + $scope.count + ' subcount ' + $scope.subCount);
});
/* Via $$postDigest */
/*
var inDigest = false;
$scope.$watch(function() {
// Called at least one time on every digest cycle
console.log('tick', Date.now());
if(!inDigest) {
inDigest = true;
$scope.$$postDigest(function() {
// Should be called once (even if digest queues another digest).
console.log('Post digest cycle', 'count ' + $scope.count + ' subcount ' + $scope.subCount);
// Do your post digest here.
inDigest = false;
});
}
});
*/
$scope.triggerDigest = function() {
// Change a variable on the scope, which triggers the (re)digest cycle
$scope.count += 1;
};
$scope.$watch('count', function(value) {
console.log('watch count', $scope.count);
if ($scope.queueSubDigest) {
// Queue another digest (what happens if something in the digest
// makes another change)
console.log('Queueing another digest');
$scope.subCount += 1;
}
});
$scope.$watch('subCount', function(value) {
console.log('watch subCount', $scope.subCount);
});
});
/* Styles go here */