Heim Web-Frontend js-Tutorial Eine kurze Diskussion über die Methode zur Implementierung der bidirektionalen Bindung in angle.js $watch $digest $apply_AngularJS

Eine kurze Diskussion über die Methode zur Implementierung der bidirektionalen Bindung in angle.js $watch $digest $apply_AngularJS

May 16, 2016 pm 03:36 PM
angular apply watch

Funktionen in Angular.js, bidirektionale Bindung.

Was für eine magische Funktion, die es ermöglicht, Änderungen in der Ansicht direkt in den Daten widerzuspiegeln. Wie geht das?

Dies ist den folgenden 3 wichtigen Scope-Methoden zu verdanken:

$watch
$digest
$apply

Was sind ihre Unterschiede? Stellen wir sie vor:

$watch
Dies ist ein Listener, der Daten im Bereich abhört

Methodenbeschreibung:

$scope.$watch('参数',function(newValue,oldValue){
 //逻辑处理
})
Nach dem Login kopieren

Wir haben oben einen Listener erstellt.
„Parameter“ ist ein Objekt (oder ein Attribut eines Objekts) unter dem $scope-Objekt. Beachten Sie, dass es sich um eine Zeichenfolge handelt

Angenommen, Sie möchten die Eigenschaft $scope.name überwachen.

$scope.$watch('name',function(newValue,oldValue){
 //逻辑处理
})
Nach dem Login kopieren
Wie im obigen Code benötigt „Name“ Anführungszeichen

Dem Parameter folgt eine Rückruffunktion. Der Parameter der Rückruffunktion gibt das überwachte Attribut, den neuen Wert nach der Änderung und den alten Wert vor der vorherigen Änderung zurück.

$digest

Er ist dafür verantwortlich, zu überprüfen, ob sich die Daten im Bereich geändert haben. Wenn sich ein bestimmtes Attribut ändert, benachrichtigt er den Listener sofort über dieses Attribut (den von $watch registrierten Listener), löst den Listener aus und führt die Rückruffunktion aus .

$apply

Diese Methode ist $digest sehr ähnlich, $digest prüft alle Daten im Bereich

$apply entspricht der Überprüfung aller Daten in rootScope, es überprüft alle Daten vom übergeordneten zum untergeordneten Element

$apply() == $rootScope.$digest()

Die Methode $apply() hat zwei Formen.

Der erste akzeptiert eine Funktion als Parameter.

Dies löst die Funktion $digest aus und führt die Funktion
im Parameter einmal aus

Der zweite Typ akzeptiert keine Parameter.

Dies löst lediglich einen $digest-Eltern-zu-Kind-Zyklus aus

In Angular.js wird $digest nicht direkt aufgerufen, sondern $scope.$apply() wird stattdessen verwendet

Ich habe den Monitor nicht eingestellt, warum können die Ansicht und die Daten in zwei Richtungen gebunden werden

Zum Beispiel ein Textfeld ng-model="name"

Zu diesem Zeitpunkt gibt es tatsächlich einen Attributnamen unter dem $scope-Objekt, der der bidirektionalen Bindung mit der obigen Ansicht
entspricht

Wie erreicht man das?

In der Tat, wenn wir ng-model="name" oder ng-bind="name" oder {{name} definieren Zu diesem Zeitpunkt legt angle.js automatisch einen Listener für das „name“-Attribut im $scope-Modell fest:


$scope.$watch('name', function(newValue, oldValue) {
  //监听 name 属性的变化
});
Nach dem Login kopieren
Es stellt sich heraus, dass angle.js uns dabei hilft, automatisch einen Listener zu erstellen, sodass diese Eigenschaft und die Daten von $scope.name in Echtzeit in beide Richtungen gebunden werden.

Natürlich werden Sie manchmal feststellen, dass sich die Daten geändert haben, aber die Benutzeroberfläche wird nicht aktualisiert.

Nein


Es ist nur so, dass Ihre Daten noch nicht zurückgegeben wurden, wenn das $scope-Modell die Digest-Schleife durchläuft,

Beim asynchronen Aufruf einer Methode werden beispielsweise die von Callbac zurückgegebenen Daten

Sie legen beispielsweise eine geplante Triggerfunktion in setTimeout fest und ändern dann die Modelldaten

Kurz gesagt, der Digest-Zyklus des $scope-Modells wurde verpasst, was dazu führte, dass das Modell die Benutzeroberfläche nicht dazu aufforderte, entsprechend neuen Daten zu aktualisieren.

Was soll ich tun, wenn ich auf ein solches Problem stoße?

Wir müssen Digest manuell aufrufen, um die Daten in einer Schleife zu überprüfen und eine bidirektionale Bindung zu erreichen

Wie wir oben gesagt haben, rufen Sie die Digest-Methode normalerweise nicht direkt auf, sondern rufen Sie die $apply-Methode manuell auf, um die $digest-Schleife indirekt auszulösen.

Wie folgt:

setTimeout(function() {
 $scope.name= '一介布衣';
 $scope.$apply();
}, 2000);
Nach dem Login kopieren
Das Problem liegt hier, es ist Zeit, die Apply-Methode manuell aufzurufen

Bisher hat angle.js die Methode $apply() für einige Anweisungen und Dienste automatisch implementiert.

Zum Beispiel ng-click, ng-model, $timeout service, $http service usw.


Nach dem Aufruf ruft angle.js automatisch $apply() auf, damit wir eine bidirektionale Datenbindung erreichen können.

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Benutzer stoßen auf seltene Störungen: Bei Samsung Watch-Smartwatches treten plötzlich Probleme mit dem weißen Bildschirm auf Benutzer stoßen auf seltene Störungen: Bei Samsung Watch-Smartwatches treten plötzlich Probleme mit dem weißen Bildschirm auf Apr 03, 2024 am 08:13 AM

Möglicherweise sind Sie schon einmal auf das Problem gestoßen, dass auf dem Bildschirm Ihres Smartphones grüne Linien erscheinen. Auch wenn Sie es noch nie gesehen haben, müssen Sie entsprechende Bilder im Internet gesehen haben. Haben Sie schon einmal erlebt, dass der Bildschirm einer Smartwatch weiß wird? Am 2. April erfuhr CNMO aus ausländischen Medien, dass ein Reddit-Benutzer ein Bild auf der sozialen Plattform geteilt hatte, auf dem zu sehen war, wie der Bildschirm der Smartwatches der Samsung Watch-Serie weiß wurde. Der Benutzer schrieb: „Ich war gerade dabei, aufzuladen, und als ich zurückkam, war es so. Ich habe versucht, neu zu starten, aber der Bildschirm der Samsung Watch wurde beim Neustart immer noch weiß.“ Der Reddit-Benutzer hat das Smartwatch-spezifische Modell nicht angegeben. Dem Bild nach zu urteilen dürfte es sich jedoch um eine Samsung Watch5 handeln. Zuvor hatte sich auch ein anderer Reddit-Benutzer gemeldet

So installieren Sie Angular unter Ubuntu 24.04 So installieren Sie Angular unter Ubuntu 24.04 Mar 23, 2024 pm 12:20 PM

Angular.js ist eine frei zugängliche JavaScript-Plattform zum Erstellen dynamischer Anwendungen. Es ermöglicht Ihnen, verschiedene Aspekte Ihrer Anwendung schnell und klar auszudrücken, indem Sie die Syntax von HTML als Vorlagensprache erweitern. Angular.js bietet eine Reihe von Tools, die Sie beim Schreiben, Aktualisieren und Testen Ihres Codes unterstützen. Darüber hinaus bietet es viele Funktionen wie Routing und Formularverwaltung. In dieser Anleitung wird erläutert, wie Angular auf Ubuntu24 installiert wird. Zuerst müssen Sie Node.js installieren. Node.js ist eine JavaScript-Ausführungsumgebung, die auf der ChromeV8-Engine basiert und es Ihnen ermöglicht, JavaScript-Code auf der Serverseite auszuführen. In Ub sein

Eine kurze Analyse der Verwendung des Monaco-Editors in Angular Eine kurze Analyse der Verwendung des Monaco-Editors in Angular Oct 17, 2022 pm 08:04 PM

Wie verwende ich den Monaco-Editor in Angular? Der folgende Artikel dokumentiert die Verwendung des Monaco-Editors in Angular, der kürzlich in einem Unternehmen verwendet wurde. Ich hoffe, dass er für alle hilfreich sein wird!

Ein Artikel über serverseitiges Rendering (SSR) in Angular Ein Artikel über serverseitiges Rendering (SSR) in Angular Dec 27, 2022 pm 07:24 PM

Kennen Sie Angular Universal? Es kann dazu beitragen, dass die Website eine bessere SEO-Unterstützung bietet!

Was soll ich tun, wenn das Projekt zu groß ist? Wie teilt man Angular-Projekte sinnvoll auf? Was soll ich tun, wenn das Projekt zu groß ist? Wie teilt man Angular-Projekte sinnvoll auf? Jul 26, 2022 pm 07:18 PM

Das Angular-Projekt ist zu groß. Wie kann man es sinnvoll aufteilen? Der folgende Artikel zeigt Ihnen, wie Sie Angular-Projekte sinnvoll aufteilen. Ich hoffe, er ist hilfreich für Sie!

Wie vue3-Daten watch/watchEffect überwachen Wie vue3-Daten watch/watchEffect überwachen May 12, 2023 pm 06:31 PM

Wir alle wissen, dass die Funktion des Listeners darin besteht, jedes Mal auszulösen, wenn sich der reaktive Status ändert. In der kombinierten API können wir die Funktion watch() und watchEffect() verwenden Lösen Sie gleichzeitig Vue-Komponentenaktualisierungen und Listener-Rückrufe aus. Standardmäßig werden vom Benutzer erstellte Listener-Rückrufe aufgerufen, bevor die Vue-Komponente aktualisiert wird. Das bedeutet, dass das DOM, auf das Sie im Listener-Callback zugreifen, den Zustand hat, in dem es sich vor der Aktualisierung durch Vue befand. Werfen wir also einen Blick darauf: Wie können wir sie sinnvoll nutzen? Was ist der Unterschied zwischen ihnen? Die Funktion watch () muss auf eine bestimmte Datenquelle hören, z. B. auf eine Referenz. Der erste Parameter von watch kann sein

Wie man PHP und Angular für die Frontend-Entwicklung verwendet Wie man PHP und Angular für die Frontend-Entwicklung verwendet May 11, 2023 pm 04:04 PM

Mit der rasanten Entwicklung des Internets wird auch die Front-End-Entwicklungstechnologie ständig verbessert und iteriert. PHP und Angular sind zwei Technologien, die in der Frontend-Entwicklung weit verbreitet sind. PHP ist eine serverseitige Skriptsprache, die Aufgaben wie die Verarbeitung von Formularen, die Generierung dynamischer Seiten und die Verwaltung von Zugriffsberechtigungen übernehmen kann. Angular ist ein JavaScript-Framework, mit dem Single-Page-Anwendungen entwickelt und komponentenbasierte Webanwendungen erstellt werden können. In diesem Artikel erfahren Sie, wie Sie PHP und Angular für die Frontend-Entwicklung verwenden und wie Sie diese kombinieren

Eine kurze Analyse unabhängiger Komponenten in Angular und deren Verwendung Eine kurze Analyse unabhängiger Komponenten in Angular und deren Verwendung Jun 23, 2022 pm 03:49 PM

Dieser Artikel führt Sie durch die unabhängigen Komponenten in Angular, wie Sie eine unabhängige Komponente in Angular erstellen und wie Sie vorhandene Module in die unabhängige Komponente importieren. Ich hoffe, er wird Ihnen hilfreich sein!

See all articles