Verstehen von object.defineProperty, um Reaktionsfähigkeit zu erreichen Wissen, worauf sich „observe/watcher/dep“ bezieht Verstehen Sie das Publish-Subscribe-Modell und die spezifischen Probleme, die es löst Es gibt im Allgemeinen zwei Lösungen, um Datenreaktionsfähigkeit in Javascript zu implementieren, die den von vue2.x bzw. vue3.x verwendeten Methoden entsprechen. Diese sind:
Tipp: Das Folgende ist der Hauptinhalt dieses Artikels. Die folgenden Fälle können als Referenz verwendet werden Was ist Vue-Responsive?Eines der einzigartigsten Merkmale von Vue ist sein nicht-intrusives Reaktivitätssystem. Datenmodelle sind einfach nur JavaScript-Objekte. Und wenn Sie sie ändern, wird die Ansicht aktualisiert. Dadurch wird die Statusverwaltung ziemlich unkompliziert, es ist jedoch wichtig zu verstehen, wie sie funktioniert, damit Sie einige häufige Probleme vermeiden können. In diesem Abschnitt untersuchen wir Die Details auf niedriger Ebene des Reaktionssystems von Vue. Wie implementiere ich Vue-Reaktionsfähigkeit?Datenreaktivität: Das Datenmodell ist nur ein gewöhnliches JavaScript-Objekt. Wenn wir die Daten ändern, wird die Ansicht aktualisiert, wodurch häufige DOM-Operationen vermieden und die Entwicklungseffizienz verbessert werden. Dies unterscheidet sich von JQuery, das häufig DOM betreibt. Grundlegendes zur bidirektionalen DatenbindungWenn sich die Daten ändern, ändert sich die Ansicht, und wenn sich die Ansicht ändert, ändern sich die Daten entsprechend (anhand dieses Satzes können wir erkennen, dass die Datenreaktionsfähigkeit in der bidirektionalen Bindung enthalten ist). Wir können v-model verwenden, um eine bidirektionale Datenbindung für Formularelemente zu erstellen Datengesteuert ist eines der einzigartigsten Merkmale von Vue Während des Entwicklungsprozesses müssen Sie sich nur auf die Daten selbst konzentrieren, nicht darauf, wie die Daten in der Ansicht gerendert werden. Gängige MVVM-Frameworks haben Datenreaktionsfähigkeit und bidirektionale Bindung implementiert, sodass Daten an das DOM gebunden werden können. In vue.js bedeutet „datengesteuert“, dass sich die Benutzeroberfläche bei Datenänderungen entsprechend ändert und Entwickler das DOM nicht manuell ändern müssen. Verständnis von datengesteuerten:Wie also erreicht Vuejs diesen datengesteuerten Ansatz? Vue implementiert die bidirektionale Datenbindung hauptsächlich durch die Verwendung von Datenentführung in Kombination mit dem Publisher-Subscriber-Modell, indem der Setter und Getter jedes Attributs über Object.defineProperty() entführt wird und bei Datenänderungen Nachrichten an Abonnenten veröffentlicht werden, wodurch entsprechende Überwachungs-Callbacks ausgelöst werden. Wenn Sie ein einfaches JavaScript-Objekt als Datenoption an eine Vue-Instanz übergeben, iteriert Vue über dessen Eigenschaften und konvertiert sie mit Object.defineProperty in Getter/Setter. Getter/Setter sind für den Benutzer nicht sichtbar, aber intern ermöglichen sie es Vue, Abhängigkeiten zu verfolgen und Änderungen zu melden, wenn auf Eigenschaften zugegriffen wird und diese geändert werden. Zweiwege-Datenbindung von Vue Verwenden Sie MVVM als Einstiegspunkt für die Datenbindung, integrieren Sie Observer, Compile und Watcher, verwenden Sie Observer, um die Datenänderungen Ihres eigenen Modells zu überwachen, verwenden Sie Compile, um die Anweisungen zur Kompilierungsvorlage zu analysieren (wird zum Analysieren von {{}} in Vue verwendet) und verwenden Sie schließlich Watcher, um eine Kommunikationsbrücke zwischen Observer und Compile aufzubauen, um den bidirektionalen Bindungseffekt von Datenänderung -> Ansichtsaktualisierung; Ansichtsinteraktionsänderung (Eingabe) -> Datenmodelländerung zu erzielen. Analyse von Vue-bidirektionalen Daten? /v-model Das Prinzip der bidirektionalen DatenbindungDer Code lautet wie folgt (Beispiel): <Skript> // Objektwert in Groß- und Kleinschreibung schreiben let data = { Name: 'Li Bai', Alter: 18 } Objekt.Schlüssel(Daten).fürJeden(Schlüssel => { defineReactiveProperty(Daten, Schlüssel, Daten[Schlüssel]) }) Funktion defineReactiveProperty(Daten, Schlüssel, Wert) { Object.defineProperty(Daten, Schlüssel, { // erhalten() { Rückgabewert }, // Wert setzen set(newVaue) { wenn (neuerWert === Wert) { zurückkehren } Wert = neuerWert kompilieren() } }) } kompilieren() </Skript> </body> </html> Funktion compine () { // Alle untergeordneten Elemente unter der App über document.querySelect('#app').childNodes abrufen const nodes = document.querySelector('#app').childNodes // Diesen Wert ausgeben. Der aktuelle Wert ist ein verschachteltes Array. Wir verwenden foreach // konsole.log(Knoten) nodes.forEach(item => { // Element erneut ausgeben html:49 <input type="text" v-model="name"> ist ein Eingabefeld // console.log(item) // Filtere die aktuellen Labels heraus, da die Ausgabe der Knoten den Raum als „Text“ vom Knotentyp 3 verwendet und das Label vom Knotentyp 1 ist, wenn entschieden wird, dass es ein Label ist, wenn (item.nodeType === 1) { const attrs = Artikel.Attribute // console.log(attrs) {0: Typ, 1: v-Modell, Typ: Typ, v-Modell: v-Modell, Länge: 2} gibt ein Array zurück Array.from(attrs).forEach(arr => { // console.log(arr) // texgt= 'text' v-mode: 'name' , filtere dieses v-Modell heraus wenn (arr.nodeName === 'v-model'){ Artikel.Wert = Daten[arr.Knotenwert] item.addEventListener('Eingabe',e => { Konsole.log(e.Ziel.Wert) // Daten[arr.nodeValue] = e.target.value }) } }) } }) } Zusammenfassen
Dies ist das Ende dieses Artikels über die Reaktionsprinzipien und bidirektionalen Daten von Vue. Weitere relevante Inhalte zu den Reaktionsprinzipien und bidirektionalen Daten von Vue finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Einführung in den Löschvorgang von B-Tree
So können Sie mithilfe des CSS-Stils die Schrifta...
Anwendungsszenarien: Die Seiten des Projekts müss...
Wir haben viele Server, die häufig von externen N...
Der Docker-Container stellt Dienste bereit und la...
Da ich auf einen neuen Computer gewechselt bin, m...
Inhaltsverzeichnis Vorwort Problembeschreibung Ur...
Binlog ist eine binäre Protokolldatei, die zum Au...
Hintergrund des Problems Das Serverüberwachungssy...
Inhaltsverzeichnis 1. Was ist der Ausführungskont...
<br />Frage: Warum ist es nicht empfehlenswe...
Wir alle wissen, dass Apache in der Konfiguration...
Mit dem obigen Artikel habe ich meine Einführung i...
Vorwort: In MySQL sollte die Master-Slave-Archite...
Starten Sie MySQL zunächst im Skip-Grant-Tables-M...
Vorwort Kürzlich bin ich bei der Entwicklung eine...