Heim  >  Artikel  >  Web-Frontend  >  Die korrekte Art und Weise, wie globale AngularJS-Variablen von Scope_AngularJS überwacht werden

Die korrekte Art und Weise, wie globale AngularJS-Variablen von Scope_AngularJS überwacht werden

WBOY
WBOYOriginal
2016-05-16 15:16:051330Durchsuche

Wenn Sie nur das Fazit wissen wollen:

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

Jemand hat sofort gefragt, warum nicht:

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

Lassen Sie mich Ihnen erklären, warum ich die erste Methode aufgrund eines kürzlich aufgetretenen Fehlers verwenden sollte.

Die Logik ist wie in der Abbildung dargestellt. Zu Beginn habe ich die Schreibmethode von $rootScope.$watch verwendet. Weil die Überwachung von anglejs auf $rootScope nach der Registrierung global gültig ist. Und meine globale Variable ist zufällig eine Auftragsinformation, was bedeutet, dass verschiedene Controller Änderungen daran vornehmen und jede Änderung dazu führt, dass $rootScope.$watch andere Controller eingibt. Analog dazu wird $broadcast auf $rootScope global gestartet.

Tatsächlich ist dies nicht die einzige Möglichkeit, den Quellcode der Watch-Methode zu finden, indem Sie den Angular-Quellcode überprüfen, der den folgenden Code enthält:

return function deregisterWatch() {
if (arrayRemove(array, watcher) >= 0) {
incrementWatchersCount(scope, -1);
}
lastDirtyWatch = null;
};

Dieser Code sagt uns, dass eine manuelle Reinigung der Uhr möglich ist. Zum Beispiel:

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

Es ist immer noch sehr einfach, oder? Die obige Methode kann auch für Uhren mit Zielfernrohr verwendet werden.

Als ich das recherchierte, hatte ich das Gefühl, dass etwas nicht stimmte. Wird mein $scope gelöscht? Schauen Sie sich also weiterhin den Quellcode an. Ich habe den folgenden Code in der Methode $destroy gefunden:

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

Der obige Code stellt die korrekte Haltung für die Überwachung globaler Angularjs-Variablen in diesem Artikel dar. Ich hoffe, dass er für Sie hilfreich ist. Wenn dieser Artikel nicht gut geschrieben ist, geben Sie mir bitte einige Ratschläge.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn