Maison > interface Web > js tutoriel > La manière correcte pour que les variables globales Angularjs soient surveillées par scope_AngularJS

La manière correcte pour que les variables globales Angularjs soient surveillées par scope_AngularJS

WBOY
Libérer: 2016-05-16 15:16:05
original
1354 Les gens l'ont consulté

Si vous voulez juste connaître la conclusion :

$scope.$watch($rootScope.xxx,function(newVal,oldVal){
//do something
})
Copier après la connexion

Quelqu'un a immédiatement demandé pourquoi pas :

$rootScope.$watch("xxx",function(newVal,oldVal){
//do something
})
Copier après la connexion

Laissez-moi vous expliquer pourquoi je devrais utiliser la première méthode d'un bug récent que j'ai rencontré.

La logique est celle indiquée sur la figure. Au début, j'ai utilisé la méthode d'écriture de $rootScope.$watch. Parce que la surveillance d'angularjs sur $rootScope est globalement valide une fois enregistrée. Et ma variable globale se trouve être des informations de commande, ce qui signifie que différents contrôleurs y ont apporté des modifications, et chaque changement déclenchera $rootScope.$watch pour entrer dans d'autres contrôleurs. Par analogie, $broadcast sur $rootScope démarrera globalement.

En fait, ce n'est pas le seul moyen. Il n'est pas difficile de trouver le code source de la méthode watch en vérifiant le code source angulaire, y compris le code suivant :

return function deregisterWatch() {
if (arrayRemove(array, watcher) >= 0) {
incrementWatchersCount(scope, -1);
}
lastDirtyWatch = null;
};
Copier après la connexion

Ce code nous indique que le nettoyage manuel de la montre est réalisable. Par exemple :

var watcher = $rootScope.$watch("xxx",function(){});
//手动清除 watcher 
watcher();
Copier après la connexion

C’est quand même très simple, non ? La méthode ci-dessus peut également être utilisée pour les montres sur lunette.

Lorsque j'ai fait des recherches à ce sujet, j'ai senti qu'il y avait un problème. Mon $scope sera-t-il effacé ? Alors continuez à parcourir le code source, j'ai trouvé le code suivant dans la méthode $destroy :

// Disable listeners, watchers and apply/digest methods
this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop;
this.$on = this.$watch = this.$watchGroup = function() { 
return noop; 
};
this.$$listeners = {};
Copier après la connexion

Le code ci-dessus est la posture correcte pour que les variables globales Angularjs soient surveillées par la portée présentée dans cet article. J'espère qu'il vous sera utile. Si cet article n'est pas bien écrit, donnez-moi quelques conseils.

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal