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. Verwenden Sie das Tag <a> zum Vervollstä...
Inhaltsverzeichnis Vorne geschrieben Was genau is...
Inhaltsverzeichnis Linux-Netstat-Befehl 1. Detail...
<Vorlage> <div Klasse="App-Containe...
//Grammatik: @media Medientyp und | nicht | nur (...
Die Downloadadresse von FlashFXP lautet: https://...
Als nützlicher Terminalemulator wird Xshell häufi...
Beim Verknüpfen zweier Tabellen konnte kein Fremd...
Inhaltsverzeichnis Vorwort Vorteil: Mangel: 1. Re...
Leider trat der Fehler MYSQL_DATA_TRUNCATED währe...
Der Textarea-Tag ist ein HTML-Tag, den wir häufig ...
Analysieren Sie die Produktionsschritte: 1. Resso...
Vorwort Semikolons sind in JavaScript optional un...
Als grundlegendes Element einer Webseite sind Bil...
In diesem Artikel wird der spezifische Code von j...