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

js implementiert das klassische Minesweeper-Spiel

In diesem Artikelbeispiel wird der spezifische Co...

Zusammenfassung der zwölf Methoden der Vue-Wertübertragung

Inhaltsverzeichnis 1. Vom Vater zum Sohn 2. Vom S...

Vue implementiert Drag-Fortschrittsbalken

In diesem Artikelbeispiel wird der spezifische Co...

WebWorker kapselt JavaScript-Sandbox-Details

Inhaltsverzeichnis 1. Szenario 2. Implementieren ...

Einführungstutorial zum MySQL-Multitabellen-Join

Über Verbindungen lassen sich faktische Fremdschl...

CSS zum Erzielen von leuchtendem Text und ein paar JS-Spezialeffekten

Umsetzungsideen: Verwenden Sie text-shadow in CSS...

Installationsprozess von VMware vCenter 6.7 (grafisches Tutorial)

Hintergrund Ursprünglich wollte ich ein 6.7 Vcent...

Detaillierter Prozess der Installation von Jenkins-2.249.3-1.1 mit Docker

Inhaltsverzeichnis 1. Docker installieren 2. Zieh...

Detaillierte Einführung in die JavaScript-Funktion

Durch Funktionen lassen sich beliebig viele Anwei...

Verwenden Sie vue2+elementui für Hover-Prompts

Die Hover-Prompts von Vue2+elementui sind in exte...

Erste Schritte mit MySQL - Konzepte

1. Was ist das? MySQL ist das beliebteste relatio...

js-Entwicklungs-Plugin zum Erzielen eines Tab-Effekts

In diesem Artikelbeispiel wird der spezifische Co...

Stellen Sie IE8 so ein, dass Code im IE7-Stil verwendet wird

<meta http-equiv="x-ua-kompatibel" co...