모델이 바뀌었을때 뷰로 반영되는 원리는 간단합니다. AngularJS는 모델에서 값이 바뀌었는지를 알아내기 위해서 값을 기억하고 있습니다. 이전 값과 새로운 값을 비교하고 만약 바뀌었다면 변경 이벤트를 발생시키는 것입니다. 이런 더티 체킹을 $scope의 $digest 메서드가 구현 하고 있습니다. $digest 는 외부 모듈에서 변경을 반영하기 위해 $apply를 호출할때 내부적으로 호출하는 함수이기도 하죠. ( http://docs.angularjs.org/api/ng.$rootScope.Scope ) $watch 메서드로 리스너를 설정해넣을수 있습니다. 이 $appy는 AngularJS의 라이프사이클 상에서 자동으로 수행되기 때문에 JQuery UI 같은 외부 모듈의 Event처리등에서만 직접 호출하지 AngularJS상에서는 직접 호출할 필요가 없습니다.
이런 더티 체킹은 리스너 설정 방식의 프로그래밍과 비교될수 있는데 그 간단함음 매우 맘에 들지만 성능이 안좋을 수 있을것 같다는 우려를 하게됩니다. 성능은 대부분의 구형 PC에서도 크게 문제 없이 돌아가기 때문에 얻을수 있는 장점에 비해 별로 문제가 안된다는 입장입니다. 자세한 비교는 ( http://stackoverflow.com/questions/9682092/databinding-in-angularjs ) 에서 확인하실수 있습니다.