Szenario: Die von uns häufig verwendeten Interaktionsmethoden zwischen übergeordneten und untergeordneten Komponenten sind: Heute implementieren wir die Interaktion auf eine andere Weise, indem wir uns auf das V-Modell des Eingabefelds beziehen, um die bidirektionale Datenbindung benutzerdefinierter Komponenten zu implementieren. Unterkomponentendefinition: Da der Wert des Props-Attributs nicht direkt geändert werden kann, definieren wir hier valueData, empfangen den Wert in Echtzeit durch Abhören und ändern valueData über die Klickmethode. Der Code lautet wie folgt: <Vorlage> <div> <div>{{ `Unterkomponentenwert: ${value}` }}</div> <div @click="click">Klicken Sie hier, um den Wert zu ändern</div> </div> </Vorlage> <Skript> Standard exportieren { Name: "", Modell: { Requisite: "Wert", Ereignis: „Ändern“ }, Requisiten: { Wert: Zahl }, Komponenten: {}, Daten() { zurückkehren { Wertdaten: "" }; }, betrachten: Wert(neuerWert, alterWert) { this.valueData = neuerWert; console.log(`Unterkomponentenwert: ${newValue}`); } }, erstellt() { }, montiert() { }, Methoden: { klick() { dies.valueData++; dies.$emit("ändern", dies.valueData); } } }; </Skript> <Stil lang='less' scoped> </Stil> Definition der übergeordneten Komponente: Die übergeordnete Komponente bindet den Textwert über das V-Modell. Der Name muss nicht unbedingt ein Wert sein, es kann jede andere Zeichenfolge sein, die der Namenskonvention entspricht. Hier ist es Text. Der Code lautet wie folgt: <Vorlage> <div> <div>{{ `Wert der übergeordneten Komponente: ${text}` }}</div> <div @click="click">Klicken Sie hier, um den Wert zu ändern</div> <span>--------------------------------------------------------------------------</span> <test-children v-model="text"></test-children> </div> </Vorlage> <Skript> importiere TestChildren aus "@/views/TestChildren"; Standard exportieren { Name: "", Komponenten: { TestChildren }, Daten() { zurückkehren { Text 1 }; }, erstellt() { }, montiert() { }, betrachten: text(neuerWert, alterWert) { console.log(`Wert der übergeordneten Komponente: ${newValue}`); } }, Methoden: { klick() { dieser.text--; } } }; </Skript> <Stil lang='less' scoped> </Stil> Ergebnis: Kopieren Sie den Code zum Testen direkt in Ihr eigenes Projekt. Ob der Wert von der übergeordneten oder der untergeordneten Komponente geändert wird. Die Werte der beiden durch den v-Modus gebundenen Komponenten sind immer konsistent. Fragen und Antworten: Ein Klassenkamerad fragte: Ist das nicht dasselbe, wie wenn Daten durch Props nach unten fließen und dann durch $emit nach oben weitergegeben werden? Es kann auch den Effekt einer bidirektionalen Bindung wie bei mir erzielen. Wenn wir das V-Modell nicht verwenden, schreiben wir zwangsläufig den folgenden Code in die übergeordnete Komponente: <test-children @change="changeText"></test-children> Ändern Sie dann den Textwert, indem Sie die Methode changeText definieren. Stellen Sie sich vor, dass wir bei einer komplexeren Seite und einer größeren Anzahl referenzierter Komponenten mehr als zehn oder zwanzig Methoden wie diese auf der Seite definieren müssen. Die Anzahl der lesbaren Zeilen wird erheblich reduziert, was zu höheren Wartungskosten führt. Erweiterungen: Nach vue2.3 wird die Synchronisierungsmethode bereitgestellt, mit der auch eine bidirektionale Bindung realisiert werden kann Schreiben in die übergeordnete Komponente: <test-children :value.sync="text"></test-children> Die folgende Modelldefinition wird in der Unterkomponente nicht benötigt, löschen Sie sie einfach. Modell: { Requisite: "Wert", Ereignis: „Ändern“ }, Die Übergabe der Daten an die übergeordnete Komponente erfolgt mit der folgenden Methode: dies.$emit("update:value", dies.valueData); Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: JavaScript-Quellcode für Elimination
Inhaltsverzeichnis 1. Verwenden Sie in der v-for-...
In diesem Artikel wird der spezifische Code von R...
1. Einleitung Vor ein paar Tagen bin ich bei der ...
Das <label>-Tag definiert eine Bezeichnung (...
<br />Es gibt keine Straße auf der Welt. Wen...
In diesem Artikel wird der spezifische Code zur z...
Vorwort Swap ist eine spezielle Datei (oder Parti...
Die Version Mysql5.7.19 ist eine neue Version, di...
Online-Vorschau https://jsrun.pro/AafKp/ Erster B...
Gewerkschaftsexekution Verwenden Sie zur Vereinfa...
Dieser Artikel stellt vor, wie man das Ogg-Progra...
Inhaltsverzeichnis Vorwort Blasensortierung Grund...
Inhaltsverzeichnis Auf der offiziellen React-Webs...
Inhaltsverzeichnis Hintergrund So ermitteln Sie, ...
Starten Sie alle gestoppten Docker-Container mit ...