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
Der Kern ist mysqldump und Runtime Der Vorgang is...
Im Vergleich zu gewöhnlichen Programmen haben dyn...
CSS3 implementiert 2D-Ebenentransformation und vi...
1. Geschäftshintergrund Die Verwendung einer Mask...
Besonderer Hinweis: Dieser Artikel wurde basieren...
Wie konvertiere ich eine JSON-Zeichenfolge in ein...
1. Laden Sie die Software herunter 1. Gehen Sie a...
Heute stellen wir mehrere Möglichkeiten vor, mit ...
Inhaltsverzeichnis Vorwort Frage Online-Lösungen ...
Es gibt drei Arten von virtuellen Hosts, die von ...
Hinzufügen einer Netzwerkschnittstelle zum Contai...
docker-compose.yml Version: '2' Leistunge...
Das Datenvolumen ist ein wichtiges Konzept von Do...
Inhaltsverzeichnis Ist setState synchron oder asy...
Die Verwendung der MySQL Master-Slave-Replikation...