Je lis beaucoup de choses sur AngularJS de nos jours, et je suis tombé sur cette fonction magique $ watch. Je comprends comment l'utiliser, mais je me demande comment est-il mis en œuvre en arrière-plan. Est-ce une fonction d'intervalle de temps? Ou est-ce Angular appeler cette montre chaque instruction exécutée?
Je ne veux pas creuser dans le code source pour le moment, et je serais heureux si l'un d'entre vous connaissait déjà la réponse et souhaitait partager ses connaissances sur le sujet.
Merci.
Toutes les montres sont évaluées (parfois plusieurs fois) à chaque boucle de résumé. La boucle de résumé est entrée suite à un événement ou à l'appel de $ apply (). Les montres ne sont pas appelées périodiquement en fonction d'une minuterie.
Voir https://docs.angularjs.org/guide/scope#integration-with-the-browser-event-loop
La boucle d'événements du navigateur attend l'arrivée d'un événement. Le rappel de l'événement est exécuté ... Une fois le rappel exécuté, le navigateur quitte le contexte JavaScript et restitue la vue en fonction des modifications du DOM. Angular modifie le flux JavaScript normal en fournissant sa propre boucle de traitement d'événement. Cela divise le JavaScript en contexte d'exécution classique et Angular) ... Angular exécute [certains] stimulusFn (), qui modifie généralement l'état de l'application. Angular entre dans la boucle $ digest. La boucle est composée de deux boucles plus petites qui traitent la file d'attente $ evalAsync et la liste de surveillance $. La boucle $ digest continue d'itérer jusqu'à ce que le modèle se stabilise, ce qui signifie que la file d'attente $ evalAsync est vide et que la liste de surveillance $ ne détecte aucun changement. La liste de surveillance $ est un ensemble d'expressions qui peuvent avoir changé depuis dernière itération. Si un changement est détecté, la fonction $ watch est appelée, ce qui met généralement à jour le DOM avec la nouvelle valeur.