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
WBOYoriginal
2016-05-16 15:16:051349parcourir

Si vous voulez juste connaître la conclusion :

$scope.$watch($rootScope.xxx,function(newVal,oldVal){
//do something
})

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

$rootScope.$watch("xxx",function(newVal,oldVal){
//do something
})

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;
};

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

var watcher = $rootScope.$watch("xxx",function(){});
//手动清除 watcher 
watcher();

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 = {};

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.

Déclaration:
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