Wenn sich die Daten ändern, wird die DOM-Ansicht nicht sofort aktualisiert. Wenn wir versuchen, einen Knoten oder seinen Wert unmittelbar nach der Änderung abzurufen, ist das Ergebnis wahrscheinlich undefiniert. Dies liegt daran, dass Vue Reaktionsfähigkeit nicht implementiert, weil sich das DOM unmittelbar nach der Datenänderung ändert, sondern weil es das DOM gemäß einer bestimmten Strategie aktualisiert. Schauen wir uns eine kleine Demo an: App.vue <Vorlage> <div id="app"> <div ref="message">{{msg}}</div> <div v-if="msg1">{{msg1}}</div> <button @click="changeMsg">Nachricht ändern</button> </div> </Vorlage> <Skript> Standard exportieren { Name: "App", Daten(){ zurückkehren { msg:"Hallo Vue", msg1: '', } }, Methoden:{ Nachricht ändern(){ this.msg = 'Hallo Welt'; dies.msg1=dies.$refs.message.innerHTML; console.log("Vor dem Aktualisieren des DOM: "+this.msg1) } } } </Skript> <Stil> #app { Schriftfamilie: „Avenir“, Helvetica, Arial, serifenlos; -webkit-font-smoothing: Kantenglättung; -moz-osx-font-smoothing: Graustufen; Textausrichtung: zentriert; Farbe: #2c3e50; Rand oben: 60px; } </Stil> Durch Ausführen des Codes können wir sehen, dass der Wert von this.$refs.message.innerHTML immer noch den vorherigen Anfangswert speichert, wenn wir in der Methode this.$nextTick keine DOM-Operationen ausführen. Ändern Sie den Code: App.vue <Vorlage> <div id="app"> <div ref="message">{{msg}}</div> <div v-if="msg1">{{msg1}}</div> <button @click="changeMsg">Nachricht ändern</button> </div> </Vorlage> <Skript> Standard exportieren { Name: "App", Daten(){ zurückkehren { msg:"Hallo Vue", msg1: '', } }, Methoden:{ Nachricht ändern(){ this.msg = 'Hallo Welt'; // dies.msg1=dies.$refs.message.innerHTML; // console.log("Vor dem Aktualisieren des DOM: "+this.msg1) dies.$nextTick(()=>{ dies.msg1=dies.$refs.message.innerHTML; console.log("Nach dem Aktualisieren des DOM: "+this.msg1) }) } } } </Skript> <Stil> #app { Schriftfamilie: „Avenir“, Helvetica, Arial, serifenlos; -webkit-font-smoothing: Kantenglättung; -moz-osx-font-smoothing: Graustufen; Textausrichtung: zentriert; Farbe: #2c3e50; Rand oben: 60px; } </Stil> Nachdem wir den Code geändert haben, können wir feststellen, dass es einfach ist, den aktualisierten Wert mit this.$nextTick zu erhalten, genau wie auf der offiziellen Website erklärt: Der verzögerte Rückruf wird ausgeführt, nachdem der nächste DOM-Aktualisierungszyklus endet. Verwenden Sie diese Methode unmittelbar nach der Änderung der Daten, um das aktualisierte DOM zu erhalten. Lassen Sie uns den Code ändern und vergleichen: App.vue <Vorlage> <div id="app"> <div ref="message">{{msg}}</div> <div v-if="msg1">{{msg1}}</div> <button @click="changeMsg">Nachricht ändern</button> </div> </Vorlage> <Skript> Standard exportieren { Name: "App", Daten(){ zurückkehren { msg:"Hallo Vue", msg1: '', } }, Methoden:{ Nachricht ändern(){ this.msg = 'Hallo Welt'; dies.msg1=dies.$refs.message.innerHTML; console.log("Vor dem Aktualisieren des DOM: "+this.msg1) dies.$nextTick(()=>{ dies.msg1=dies.$refs.message.innerHTML; console.log("Nach dem Aktualisieren des DOM: "+this.msg1) }) } } } </Skript> <Stil> #app { Schriftfamilie: „Avenir“, Helvetica, Arial, serifenlos; -webkit-font-smoothing: Kantenglättung; -moz-osx-font-smoothing: Graustufen; Textausrichtung: zentriert; Farbe: #2c3e50; Rand oben: 60px; } </Stil> Nachdem wir den Code geändert haben, können wir nun leicht die Rolle von this.$nextTick(callback) erkennen. callback ist die Rückruffunktion, die wir zum Bedienen des DOM verwenden möchten. Anwendungsszenarien:
Da DOM-Updates asynchron sind, bestimmt beispielsweise die v-if-Direktive das Hinzufügen und Löschen von DOM-Elementen. Wenn wir in der Methode Variablen Werte zuweisen und this.$nextTick() nicht verwenden, erhalten wir wahrscheinlich den Anfangswert. Wenn wir den aktualisierten Wert erhalten möchten, müssen wir die Methode this.$nextTick() verwenden. Oben finden Sie den detaillierten Inhalt von nextTick in Vue. Weitere Informationen zu Vue finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Analyse und Lösung des abnormalen Problems beim Laden von JAR in Tomcat
1. Ich habe vor kurzem eine neue Version von Ubun...
Ein Problem, auf das Frontend-Entwickler häufig s...
Um die Version und das Tag des Bildes anzuzeigen,...
<br />Mit diesem Tag können Sie ein mehrzeil...
1. Benutzer und Gruppen hinzufügen 1. MySQL-Benut...
Manche Leute sagen, dass IE9 die zweite Revolutio...
1. Einführung in KVM Die Abkürzung für Kernel-bas...
Tabellenstruktur einer MySQL-Tabelle schnell ände...
Stichwörter Allgemein Der Titel darf keine Wörter...
1. Zweck Durch diesen Artikel kann jeder die Prin...
Mehrere Werte kombiniert anzeigen Nun haben wir d...
In diesem Dokument werden die Installations- und ...
vue+element UI kapselt eine öffentliche Funktion ...
Ein einfaches MySQL-Vollsicherungsskript, das die...
Inhaltsverzeichnis Der erste Der Zweite Native Js...