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

Erstellen Sie in 5 Minuten einen WebRTC-Videochat

Im vorherigen Artikel habe ich den detaillierten ...

Allgemeine Linux-Befehle chmod zum Ändern der Dateiberechtigungen 777 und 754

Der folgende Befehl wird häufig verwendet: chmod ...

Vue implementiert das Bild mit Schaltflächenwechsel

In diesem Artikelbeispiel wird der spezifische Co...

Drei Möglichkeiten zur Kommunikation zwischen Docker-Containern

Wir alle wissen, dass Docker-Container voneinande...

Detaillierte Erläuterung des automatischen Füllschreibens von CSS3-Flexboxen

In diesem Artikel wird hauptsächlich die Methode ...

Detaillierte Erklärung der Box-Größe in CSS3 (Content-Box und Border-Box)

Box-Größe in CSS3 (Inhaltsbox und Rahmenbox) Mit ...

Detaillierte Erklärung des Integer-Datentyps tinyint in MySQL

Inhaltsverzeichnis 1.1Tinyint-Typbeschreibung 1.2...

Erste Schritte mit Front-End-Vue-Unit-Tests

Inhaltsverzeichnis 1. Warum brauchen wir Unit-Tes...

img usemap Attribut China Karte Link

HTML-img-Tag: definiert ein Bild, das in eine Webs...

So richten Sie domänenübergreifenden Zugriff in IIS web.config ein

Anforderung: Die Seite muss ein Bild anzeigen, ab...

Einführung in die Installation und Konfiguration von JDK unter CentOS-Systemen

Inhaltsverzeichnis Vorwort Überprüfen und deinsta...

Vue3 kapselt die Textskelett-Effektkomponente der Seitennavigation

Vue3-Projektkapselung Seitennavigation Textskelet...