Implementierung der bidirektionalen Bindung von übergeordneten und untergeordneten Komponentendaten im Front-End-Framework Vue

Implementierung der bidirektionalen Bindung von übergeordneten und untergeordneten Komponentendaten im Front-End-Framework Vue

Umsetzungsideen:

Übergeben Sie Werte von übergeordneten an untergeordnete Komponenten: Verwenden Sie props Attribut. ( props ist die Pluralabkürzung von property )
Übergeben Sie Werte von untergeordneten an übergeordnete Komponenten: Verwenden Sie benutzerdefinierte Ereignisse.

1. Einweg-Wertübertragung zwischen übergeordneten und untergeordneten Komponenten

1. Wert vom übergeordneten Element an das untergeordnete Element weitergeben

Das übergeordnete Element übergibt den Wert an die untergeordnete Komponente, und nachdem die untergeordnete Komponente die Daten empfangen hat, speichert sie diese in ihrer eigenen Variable.

//Methode zum Schreiben der übergeordneten Komponente <cld :numP="num" ></cld> 
 
//Unterkomponentendefinition und Datenkomponenten:{ 
 cld:{ 
  Vorlage:'#Kind', 
  Requisiten:{ 
   numP:Nummer 
  }, 
 } 
} 
 
//Inhalt der Unterkomponente <template id="child"> 
 <div> 
  {{ numP }} 
 </div> 
</Vorlage> 


Props werden verwendet, um den von der übergeordneten Komponente übergebenen Wert zu empfangen. Es gibt viele Möglichkeiten, Props zu schreiben, beispielsweise:

//Methode 1: Dateneigenschaften direkt empfangen: ['numP'] 
 
//Methode 2: Typbeschränkungseigenschaften hinzufügen: [ 
 numP: Nummer 
 ]  
 
//Methode 3: Standardwerteigenschaften hinzufügen: [ 
 AnzahlP: { 
  Typ: Nummer, 
  Standard: 0 
  } 
]  
 
//Methode 4: Ist es notwendig, den Wert von Requisiten zu begrenzen: [ 
 AnzahlP: { 
  Typ: Nummer, 
  Standard: 0, 
  require:true //Erforderlichen Wert hinzufügen, andernfalls wird ein Fehler gemeldet} 
]  
 
//Methode 5: Verwenden von Objektform-Eigenschaften: { 
 AnzahlP: { 
  Typ: Nummer, 
  Standard: 0, 
 } 
} 

2. Wertübertragung vom Kind auf den Vater

Das Kind übergibt Werte hauptsächlich über benutzerdefinierte Ereignisse an die übergeordnete Komponente. Die spezifischen Beispiele sind wie folgt:

// Inhalt der übergeordneten Komponente <div> 
 Die von der untergeordneten Komponente erhaltenen Daten sind {{getNum}} 
 <cld :numb="num" @accept="getNumC"></cld> 
</div> 
 
//Methoden der übergeordneten Komponente methods:{ 
 getNumC(Daten){ 
  this.getNum = data //Daten von untergeordneten Komponenten empfangen} 
}, 
//Unterkomponentendefinition Komponenten:{ 
 cld:{ 
  Vorlage:'#Kind', 
  Daten(){ 
   zurückkehren { 
    numC:1314 //Unterkomponentendatendefinition} 
  }, 
  montiert(){ 
    this.$emit('accept', this.numC) // benutzerdefiniertes Ereignis auslösen} 
  } 
}, 

2. Zweiwegebindung von übergeordneten und untergeordneten Komponentendaten

Die Daten von Vue fließen in eine Richtung, und es gab in vue noch nie eine bidirektionale Bindung. Die von v-model implementierte bidirektionale Bindung ist nur syntaktischer Zucker.

Methode 1: Verwenden Sie watch , um eine bidirektionale Datenbindung zwischen übergeordneten und untergeordneten Komponenten zu implementieren. Das konkrete Beispiel lautet wie folgt:

<div id="app"> 
 Daten<br>{{num}} 
 <Eingabetyp="Text" v-Modell="num"><br> 
 <cld :numb="num" @accept="getNumC"></cld> 
</div> 
//Inhalt der Unterkomponente <template id="child"> 
 <div> 
  Daten<br>{{childNum}} 
  <Eingabetyp="Text" v-Modell="Kindnummer" /> 
 </div> 
</Vorlage> 
 
  <!-- Kommunikation zwischen übergeordneten und untergeordneten Komponenten--> 
const app = new Vue({ 
 el:'#app', 
  Daten:{ 
   Zahl: '520', 
   }, 
  Methoden:{ 
   getNumC(Daten){ 
    this.num = Daten 
   } 
  }, 
  Komponenten: { 
   cld:{ 
    Vorlage:'#Kind', 
    Requisiten:{ 
     Zahl:Zeichenfolge 
    }, 
   Daten(){ 
    zurückkehren { 
     Kinderzahl:0, 
    } 
   }, 
  betrachten:{ 
   Nummer:Funktion(){ 
    diese.Kindnummer = diese.Nummer 
   }, 
   KindNum:Funktion(){ 
    dies.$emit('akzeptieren',diese.childNum) 
    } 
   }, 
  montiert(){ 
   diese.Kindnummer = diese.Nummer 
   } 
  } 
 }  
}) 


Methode 2: sync -Modifikator zum Erreichen einer bidirektionalen Bindung

Funktionalität, die durch den .sync-Modifikator in Vue 1.x bereitgestellt wird. Wenn eine untergeordnete Komponente den Wert einer Eigenschaft mit .sync ändert, wird die Änderung auch mit dem in der übergeordneten Komponente gebundenen Wert synchronisiert. Dies ist praktisch, kann jedoch auch zu Problemen führen, da dadurch der unidirektionale Datenfluss unterbrochen wird. (Daten fließen von oben nach unten, Ereignisse fließen von unten nach oben)

<cld :numb.sync="Anzahl" ></cld> 
// wird erweitert zu: 
<cld:numb="Balken" @update:numb="Wert => Balken = Wert"/> 


Wenn die Komponente den Wert von numb aktualisieren muss, muss ein Aktualisierungsereignis ausgelöst werden:

dies.$emit("update:numb", neuerWert ); 


Die spezifischen Anwendungsbeispiele sind wie folgt:

// Übergeordnete Komponente <Father :foo.sync="foo"></Father> 
 
//Eigenschaften der untergeordneten Komponente: ['foo'], 
Daten() { 
  zurückkehren { 
   newFoo: dies.foo; 
   } 
}, 
Methoden:{ 
 hinzufügen:Funktion(){ 
  diese.neueMsg=10; 
  dies.$emit('update:foo',dies.newFoo); 
 } 
} 

Dies ist das Ende dieses Artikels über die bidirektionale Bindung von übergeordneten und untergeordneten Komponentendaten im Front-End-Framework Vue. Weitere relevante Inhalte zur bidirektionalen Bindung von übergeordneten und untergeordneten Komponentendaten in Vue finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Beispielcode einer benutzerdefinierten Vue-Komponente zur Implementierung bidirektionaler V-Model-Bindungsdaten
  • Das Prinzip und die Implementierung der bidirektionalen Bindung in Vue2.x
  • Eine kurze Diskussion über das Prinzip des bidirektionalen Ereignisbindungs-V-Modells von Vue
  • Verwenden von js zum Implementieren der bidirektionalen Bindungsfunktion von Daten in Vue2.0
  • So implementieren Sie eine bidirektionale Bindungsfunktion in vue.js mit reinem JS
  • Detaillierte Erläuterung der bidirektionalen Bindung von Vue

<<:  Detaillierte MySQL-CRUD-Anweisungen zum Hinzufügen, Löschen, Ändern und Abfragen einer einzelnen Tabelle

>>:  Problem „Nicht genügend Speicher“ und Lösung, wenn Docker Elasticsearch startet

Artikel empfehlen

JSON (JavaScript Object Notation) in einem Artikel verstehen

Inhaltsverzeichnis JSON wird angezeigt JSON-Struk...

Zusammenfassung der Ausführungsprobleme zwischen MySQL Max und Where

Ausführungsproblem zwischen MySQL Max und Where S...

Three.js-Beispielcode zur Implementierung des Tautropfen-Animationseffekts

Vorwort Hallo zusammen, hier ist der CSS-Assisten...

Beispiel für den Import von Nginx-Protokollen in Elasticsearch

Die Nginx-Protokolle werden von Filebeat gesammel...

jQuery-Plugin zur Implementierung des Minesweeper-Spiels (3)

In diesem Artikel wird der dritte Artikel zur Ver...

Vue+Element UI realisiert die Kapselung von Dropdown-Menüs

In diesem Artikelbeispiel wird der spezifische Co...

Einige Fähigkeiten, die Sie beim Erstellen von Webseiten kennen müssen

1. Z-Index ist in IE6 ungültig. In CSS wird die E...

5 Möglichkeiten, Docker-Container auf andere Server zu migrieren

Migration ist in vielen Fällen unvermeidlich. Har...

So installieren Sie MySql in CentOS 8 und erlauben Remoteverbindungen

Herunterladen und installieren. Prüfen Sie zunäch...

Designreferenz Schönes und originelles Blog-Design

Alle unten aufgeführten Blogs sind originell und ...

Schritte zum Erstellen des Projekts vite+vue3+element-plus

Verwenden Sie vite, um ein vue3-Projekt zu erstel...