AngularJS does a dirty check, every time AngularJS finds a directive, it will set $ watch to look at the changes.
The $ watch list is a collection of expressions that may change from the last iteration. If a change is detected, the $ watch function is called, which usually updates the DOM with the new value. After the Angular $ digest loop completes, execution leaves the context of Angular and JavaScript. This is followed by a re-display of the DOM browser to reflect any changes.
To say that it is simple, there is a mechanism that creates a list of directives requiring binding, during the $ digest cycle the list will be checked for changes if there is a change that the browser re-displays the DOM, and it will be reflected in the browser.
This is a very short explanation, you can find here:
http://docs.angularjs.org/guide/concepts#runtime
source share