Heim > Artikel > Web-Frontend > Die korrekte Art und Weise, wie globale AngularJS-Variablen von Scope_AngularJS überwacht werden
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.