Detaillierte Erklärung des Unterschieds zwischen der v-model-Direktive und dem .sync-Modifikator in Vue

Detaillierte Erklärung des Unterschieds zwischen der v-model-Direktive und dem .sync-Modifikator in Vue

V-Modell

    <!--Übergeordnete Komponente-->
    <Vorlage>
        <!--v-model-Direktive ist syntaktischer Zucker-->
        <Untergeordnetes v-Modell="Modell"></Untergeordnetes>
        <!-- Die Erweiterung der v-model-Direktive entspricht dem folgenden Code-->
        <!-- Das Standardereignis für die V-Model-Bindung ist die Eingabe und die Standardeigenschaft ist das Werteattribut-->
        <Untergeordnetes Element: Wert = "Modell" @Eingabe = "Modell = $Ereignis"></Untergeordnetes Element>
    </Vorlage>

Sie können die Standardereignisse und benutzerdefinierten Eigenschaften der V-Model-Bindung auch über die Modelloption in der untergeordneten Komponente ändern:

 //Unterkomponente Export Standard {
  Modell: {
         Requisite: "geprüft",
         Ereignis: „Ändern“
     }
 }

Wenn die entsprechende übergeordnete Komponente das V-Modell verwendet, lautet die entsprechende Operation:

    <Vorlage>
        <Untergeordnetes Element: geprüft = "Modell" @change = "Modell = $event"></Untergeordnetes Element>
    <Vorlage>

Das V-Modell wird normalerweise für Formularsteuerelemente verwendet, da die Komponente auf diese Weise über stärkere Steuerungsmöglichkeiten verfügt

.sync

   <!-- Übergeordnete Komponente -->
    <Vorlage>
        <!-- .sync wurde in v2.4 hinzugefügt, es kann verwendet werden, um die an die untergeordnete Komponente übergebenen Eigenschaften zu ändern -->
        <Kind :xxx.sync="Modell"></Kind>
        <!-- Entspricht dem folgenden Code -->
        <Untergeordnetes Element: xxx = "Modell" @update:xxx = "Modell = $event"></Untergeordnetes Element>
    </Vorlage>
    <!-- Untergeordnete Komponente -->
    <Eingabe: Wert = "xxx" @Eingabe = "$emit('update:xxx', $event.target.value)"/>

Der hier gebundene Attributname xxx kann geändert werden, und der entsprechende Attributname ändert sich ebenfalls:

    <!-- Übergeordnete Komponente -->
    <Vorlage>
        <Kind :foo.sync="Modell"></Kind>
    </Vorlage>
    <!-- Untergeordnete Komponente -->
    <Eingabe: Wert = "foo" @Eingabe = "$emit('update:foo', $event.target.value)"/>

Das Prinzip von .sync verwendet die $emit-Methode der untergeordneten Komponente, um Ereignisse an die übergeordnete Komponente zu versenden. Das Anwendungsszenario besteht darin, dass die untergeordnete Komponente die von der übergeordneten Komponente übergebenen Eigenschaften ändern möchte.

Die Steuerungsmöglichkeiten des Modifikators .sync liegen alle in der übergeordneten Komponente, und der Ereignisname ist relativ fest: update:xxx

Die beiden sind im Wesentlichen gleich, es gibt keinen Unterschied: „Auf ein Triggerereignis warten“ = „(val) => value = val“.

Der Unterschied in den Feinheiten

1. Allerdings entspricht v-model standardmäßig dem Eingabeereignis von Komponenten wie Eingabe oder Textbereich. Wenn dieses Eingabeereignis in der untergeordneten Komponente ersetzt wird, ist sein Wesen genau dasselbe wie das des .sync-Modifikators. Relativ einfach, kann nicht mehrere haben.

// Unterkomponenten können benutzerdefinierte Ereignisse verwenden, um die nativen Eingabeereignisse zu ersetzen, die standardmäßig dem v-Modell entsprechen, aber wir müssen $emit manuell in der Unterkomponente ausführen
Modell: {
        Requisite: "Wert",
        Ereignis: „Update“
},

Eine Komponente kann den Modifikator .sync für mehrere Eigenschaften verwenden und mehrere „Props“ gleichzeitig „bidirektional binden“, anders als beim V-Modell, wo eine Komponente nur eines haben kann.

Fassen Sie die Funktionsszenarien zusammen:

1. Beim V-Modell geht es eher um das endgültige Operationsergebnis, das Ergebnis der bidirektionalen Bindung, den Wert und eine Änderungsoperation.
Zum Beispiel: der Wert des Eingabefelds, die Werteliste des Mehrfachauswahlfelds, die ID-Werteliste der Baumstruktur (sowohl Ant-Design als auch Element) usw.
2..sync zielt auf mehrere Zustände, die gegenseitige Übertragung von Zuständen, Status und eine Aktualisierungsoperation ab.
Beispielsweise: Komponentenladestatus, Untermenü und Erweiterungsliste der Baumstruktur (eine Art Status), interner Überprüfungsstatus einer Formularkomponente usw. …

Es gibt jedoch Ausnahmen, d. h., v-model kann auch einige .sync-Situationen ersetzen. Dies ist der Fall, wenn die einzige Funktion dieser Komponente darin besteht, Zustände zu wechseln, und dieser Zustand der endgültige Betriebswert ist. Zu diesem Zeitpunkt kann der .sync-Modifikator ersetzt werden. Durch die Verwendung zweier unterschiedlicher Methoden der bidirektionalen Bindung können wir die Struktur der Komponente schnell verstehen.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Verwendung des Synchronisierungsmodifikators bei der Parameterübertragung von übergeordneten und untergeordneten Komponenten in Vue3
  • Detaillierte Erklärung des Synchronisierungsmodifikators von Vue
  • Detaillierte Erklärung des Unterschieds zwischen der Verwendung des .sync-Modifikators und des V-Modells in benutzerdefinierten VUE-Komponenten
  • Detaillierte Erklärung zur Verwendung des vue.sync-Modifikators
  • Detaillierte Erläuterung des Beispiels des .sync-Modifikators von Vue
  • So verstehen Sie die Verwendung des .sync-Modifikators von Vue
  • Verwendung und Prinzipanalyse des .sync-Modifikators in Vue

<<:  Detaillierte Erläuterung der Prinzipien und Implementierungsmethoden der MySQL-Kontoverwaltung

>>:  So verwenden Sie nginx, um eine angegebene Schnittstelle (URL) zu blockieren

Artikel empfehlen

Implementierung des Vue-Zählers

Inhaltsverzeichnis 1. Implementierung des Zählers...

So installieren Sie Graphviz und beginnen mit dem Tutorial unter Windows

Herunterladen und installierenUmgebungsvariablen ...

7 coole dynamische Website-Designs zur Inspiration

Im Bereich Design gibt es jedes Jahr unterschiedl...

CSS-Menüschaltflächenanimation

Um ein Dropdown-Menü zu schreiben, klicken Sie au...

Verstehen Sie die Grundlagen von Navicat für MySQL in einem Artikel

Inhaltsverzeichnis 1. Datenbankbetrieb 2. Datenty...

So erhalten Sie den Maximal- oder Minimalwert einer Zeile in SQL

Originaldaten und Zieldaten SQL-Anweisungen imple...

Verwendung und Unterschied von Js-Modulverpackungsexporten erfordern Import

Inhaltsverzeichnis 1. Commonjs-Exporte und erford...

Nginx-Überwachungsprobleme unter Linux

Nginx-Installation Stellen Sie sicher, dass die v...

So importieren und exportieren Sie Docker-Images

Dieser Artikel stellt den Import und Export von D...

Schritte zum Übertragen des neuen Kernels auf das Linux-System

1. Laden Sie das Ubuntu16.04-Image und den entspr...

Python schreibt die Ausgabe in den CSV-Vorgang

Wie unten dargestellt: def test_write(selbst): Fe...