Detaillierte Erläuterung des Implementierungsprinzips der bidirektionalen Datenbindung von Vue2.0/3.0

Detaillierte Erläuterung des Implementierungsprinzips der bidirektionalen Datenbindung von Vue2.0/3.0

Das Implementierungsprinzip der bidirektionalen Datenbindung von Vue2.0/3.0

Zweiseitige Datenbindung bedeutet einfach, dass Änderungen an den Daten dazu führen können, dass die Seite neu gerendert wird.

Das Prinzip von Vue2.0 ES5:

Object.defineProperty fängt Daten ab

Einfaches kleines Etui

<Text>
    Name:
    <span id="name"></span>
    <br />
    <Eingabetyp="Text" id="Eingabename" />
  </body>

Durch Ändern des Wertes im Eingabefeld ändert sich der Wert im Bereich entsprechend. Die Änderung der Daten kann die Ansicht

 <Skript>
      lass obj = {
          Name:''
      }
      Objekt.defineProperty(obj,'name',{
          erhalten(){
                return this.name //Beachten Sie, dass die Fehlerdemonstration damit keine Endlosschleife bilden kann und ein neuer Wert vorbereitet werden muss},
          setze(Wert){

          }
      })
  </Skript>

Richtiges Schreiben

<Skript>
      lass obj = {
      Name: ""
    };
    : Lassen Sie uns das neue Obj = JSON.parse(JSON.stringify(obj));
    Objekt.defineProperty(obj, "Name", {
      erhalten() {
        gibt neuen Objektnamen zurück;
      },
      setze(Wert) {
        if (val === newObj.name) return; // Erhöhen Sie die Beurteilung, um die Leistung zu optimieren. Wenn der neue Wert mit dem alten identisch ist, geben Sie ihn zurück. Wenn er unterschiedlich ist, weisen Sie den Wert erneut zu newObj.name = val;
        Beobachter();
      }
    });
    // Neuzuweisungsmethode function obServer() {
      spanName.innerHTML = newObj.name; //Wert von obj.name abrufen inputName.value = newObj.name;
    }
    obServer(); //Einmal am Anfang ausführen setTimeout(() => {
      obj.name = "Objekt";
    }, 1000);
  </Skript>

Ausführungslogik

1. setTimeout wird 1 Sekunde später ausgeführt und ändert die Daten, um das Set (Val) von obj.name auszulösen.

2. Holen Sie sich den neuesten Wert und geben Sie ihn an newObj.name weiter, um die Methode obServer() auszuführen

3. Holen Sie sich den neuesten Wert und weisen Sie spanName.innerHTML = newObj.name; inputName.value = newObj.name; zu.

Der Wert des Eingabefelds ändert sich und der Wert des Span-Felds ändert sich entsprechend

Eingabename.oninput = Funktion() {
      obj.name = dieser.wert;
    };

Dieser Vorgang wird in Vue als V-Modell bezeichnet.

Mängel von Vue 2.0

1. Die Originaldaten müssen geklont werden, sonst tritt die oben erwähnte Endlosschleife auf

2. Wenn wir das Abrufen und Festlegen von Daten in einem Objekt abfangen möchten, müssen wir die Attribute im Objekt einzeln festlegen und sie separat abhören. Wenn mehrere Attribute vorhanden sind, müssen wir sie durchlaufen und separat abhören.

Rückblick auf die Daten in vue2.0

Daten(){
zurückkehren {
obj:{}
}
}
this.obj.name='XXX' //Dieser Vorgang funktioniert nicht, da obj am Anfang keinen Namen hat, sodass keine Überwachung durchgeführt wird. Dies wird durch den zweiten Punkt oben verursacht

OK, schauen wir es uns noch einmal an.

Funktionen und Vorteile von 3.0

Hauptsächlich verwendet der Proxy in SE6

 <Skript>
    lass obj = {};
    obj = neuer Proxy(obj, {
      bekomme(Ziel, Eigenschaft) {
        console.log("D");
        Ziel zurückgeben[Eigenschaft];
      },
      setze(Ziel, Eigenschaft, Wert) {
        console.log("Z");
        Ziel[Eigenschaft] = Wert;
      }
    }); //Für die Überwachung des gesamten Objekts ist keine Angabe von Attributen erforderlich, was der Überwachung aller Attribute im Objekt entspricht. Schreiben Sie also einfach den Gesamtsatz get
  </Skript>

1. Holen Sie sich obj.name, um get auszulösen. Hier ist kein Name vorhanden, aber es kann weg, da kein Wert vorhanden ist, also gibt es undefiniert zurück.

2. Legen Sie den Namenswert fest, um den Triggersatz anzuzeigen

3. Holen Sie sich obj.name erneut, um zu sehen, ob ein Wert vorhanden ist

Unabhängig davon, ob Sie jetzt ein bestimmtes Attribut im Objekt haben, wird hier das gesamte Objekt überwacht. Alle zukünftigen Attribute im Objekt werden die Mängel von 2.0 ausgleichen.

1. Kein Klonen nötig

2. Es ist nicht nötig, die Eigenschaften jedes Objekts einzeln festzulegen. Legen Sie sie einfach für das gesamte Objekt fest. Das ist sauber und hygienisch.

Implementieren Sie den obigen 2.0-Vorgang erneut

 <Skript>
    lass obj = {};
    obj = neuer Proxy(obj, {
      bekomme(Ziel, Eigenschaft) {
        console.log("D");
        Ziel zurückgeben[Eigenschaft];
      },
      setze(Ziel, Eigenschaft, Wert) {
        console.log("Z");
        Ziel[Eigenschaft] = Wert;
        Beobachter();
      }
    }); //Für die Überwachung des gesamten Objekts ist keine Angabe von Attributen erforderlich, was der Überwachung aller Attribute im Objekt entspricht. Schreiben Sie also einfach den Gesamtsatz get
    // Neuzuweisungsmethode function obServer() {
      spanName.innerHTML = obj.name; //Wert von obj.name abrufen inputName.value = obj.name;
    }
    obServer(); //Einmal am Anfang ausführen setTimeout(() => {
      obj.name = "Objekt";
    }, 1000);
    Eingabename.oninput = Funktion() {
      obj.name = dieser.wert;
    };
  </Skript>

Zusammenfassen

Dies ist das Ende dieses Artikels über das Implementierungsprinzip der bidirektionalen Datenbindung von Vue2.0/3.0. Weitere relevante Inhalte zum bidirektionalen Datenbindungsprinzip von Vue finden Sie in den vorherigen Artikeln von 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:
  • Detaillierte Erläuterung des bidirektionalen Bindungsprinzips von Vue2.x und Vue3.x
  • Erfahren Sie etwas über die Datenreaktionsfähigkeit von Vue (der Unterschied zwischen Vue2 und Vue3)
  • Zweiwege-Datenbindungsmethode und ihre Vor- und Nachteile in Vue3.0
  • Der Unterschied zwischen der bidirektionalen Datenbindung von Vue2 und Vue3

<<:  Das einfachste Tutorial zur Sicherung und Wiederherstellung von MySQL-Daten aller Zeiten (Teil 2) (Teil 36)

>>:  So stellen Sie mit Docker schnell einen Elasticsearch-Cluster bereit

Artikel empfehlen

Spezifische Verwendung des Stapelkontexts in CSS

Vorwort Unter dem Einfluss einiger CSS-Interaktio...

Zwei Möglichkeiten, den 30-Sekunden-Werbecode aus dem Youku-Video zu entfernen

Ich glaube, jeder kennt dieses Gefühl: Ein Video m...

Detaillierte Erläuterung der Transaktionsisolierungsebenen der MySQL-Datenbank

Isolationsebene für Datenbanktransaktionen Es gib...

Detaillierte Erklärung zur Verwendung von JavaScript WeakMap

Ein WeakMap-Objekt ist eine Sammlung von Schlüsse...

Sekundäre Kapselung des Elements el-table table (mit Tischhöhenanpassung)

Vorwort Während meines Praktikums in der Firma ha...

Mysql 8.0.18 Hash-Join-Test (empfohlen)

Hash-Join Für die Ausführung von Hash Join sind k...

CentOS7 verwendet yum zur Installation von MySQL 8.0.12

In diesem Artikel werden die detaillierten Schrit...

XHTML drei Dokumenttypdeklarationen

XHTML definiert drei Dokumenttypdeklarationen. Am...

Detailliertes Tutorial zur Installation von Protobuf 3 unter Ubuntu

Wann ist die Installation durchzuführen? Wenn Sie...