$digest behaviour research

by Valentin Sarychev

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.js"></script>
<div ng-app="myApp"></div>

JavaScript

angular.module('myApp', []).run(function($rootScope) {
    var isolatedParentScope = $rootScope.$new(true);
    var childScope = isolatedParentScope.$new(false);
    var isolatedChildScope = isolatedParentScope.$new(true);
    
    setTimeout(function() {
        // прикрутить логгеры к $digest скопов
        $rootScope.$digest = _.flowRight($rootScope.$digest, function() {
            console.log(' - $rootScope digest has been invoked');
        });
        isolatedParentScope.$digest = _.flowRight(isolatedParentScope.$digest, function() {
            console.log(' - isolatedParentScope digest has been invoked');
        });
        childScope.$digest = _.flowRight(childScope.$digest, function() {
            console.log(' - childScope digest has been invoked');
        });
        isolatedChildScope.$digest = _.flowRight(isolatedChildScope.$digest, function() {
            console.log(' - isolatedChildScope digest has been invoked');
        });
        
        console.log('isolatedChildScope.$digest()');
        isolatedChildScope.$digest();
        
        console.log('childScope.$digest()');
        childScope.$digest();
        
        // NOTE дайджест на childScope породил дайджест на isolatedParentScope тоже!
    }, 0);
});