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 eines einfachen Chatroom-Dialogs basierend auf WebSocket

In diesem Artikel finden Sie den spezifischen Cod...

Eine Falle und Lösung bei der Verwendung von fileReader

Inhaltsverzeichnis Eine Falle bei fileReader Fall...

So aktivieren Sie das Root-Konto in Ubuntu 20.04

Nach der Installation von Ubuntu 20.04 gibt es st...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.19

In diesem Artikel wird das grafische Tutorial zur...

JS Cross-Domain-Lösung React-Konfiguration Reverse-Proxy

Domänenübergreifende Lösungen jsonp (get simulier...

Lösung für das Fehlen einer chinesischen Eingabemethode in Ubuntu

Es gibt keine Lösung für die chinesische Eingabem...

Horizontales Header-Menü mit CSS3 implementiert

Ergebnis:Implementierungscode html <nav class=...

Warum kann mein Tomcat nicht starten?

Inhaltsverzeichnis Phänomen: Portnutzung: Rechtsc...

Zwei Implementierungen des Front-End-Routings von Vue-Router

Inhaltsverzeichnis Modusparameter HashHistorie Ha...

So finden Sie Informationen zu nicht festgeschriebenen Transaktionen in MySQL

Vor einiger Zeit habe ich einen Blogbeitrag mit d...

Beispielanalyse der Verwendung von GROUP_CONCAT in MySQL

Dieser Artikel beschreibt anhand eines Beispiels ...