Une chose qui distingue AngularJS des autres frameworks JavaScript-MVC est sa capacité à répercuter les valeurs liées de JavaScript dans le HTML à l'aide de bindings. Angular le fait "automatiquement" lorsque vous attribuez une valeur quelconque à la variable $scope.
Mais à quel point est-ce automatique ? Parfois, Angular ne détecte pas le changement et je dois donc appeler $scope.$apply() ou $scope.$digest() pour informer Angular de détecter le changement. Parfois, lorsque j'exécute l'une ou l'autre de ces méthodes, une erreur est lancée et il est indiqué qu'un digest est déjà en cours.
Puisque les liens (tout ce qui se trouve à l'intérieur des accolades {{ }} ou des attributs ng) sont renvoyés avec eval, cela signifie-t-il qu'Angular interroge constamment l'objet $scope pour rechercher des changements et effectue ensuite une évaluation pour transférer ces changements dans le DOM/HTML ? Ou bien AngularJS a-t-il, d'une manière ou d'une autre, compris l'utilisation de variables magiques qui déclenchent des événements lorsque la valeur d'une variable change ou est assignée ? Je n'ai jamais entendu dire que cela était entièrement pris en charge par tous les navigateurs, donc j'en doute.
Comment AngularJS conserve-t-il la trace de ses liaisons et de ses variables de portée ?