Nur eine kurze Frage.
Können Sie zwingen Vue.js
, alles neu zu laden / neu zu berechnen ? Wenn das so ist, wie?
javascript
vue.js
Dave
quelle
quelle
Antworten:
Versuchen Sie diesen Zauber:
Keine Notwendigkeit, hängende Vars zu erstellen :)
Update: Ich habe diese Lösung gefunden, als ich erst mit VueJS angefangen habe. Weitere Untersuchungen haben diesen Ansatz jedoch als Krücke bewiesen. Soweit ich mich erinnere, habe ich es nach einer Weile losgeworden, einfach alle Eigenschaften, die nicht automatisch aktualisiert wurden (meistens verschachtelte), in berechnete Eigenschaften zu setzen.
Weitere Informationen hier: https://vuejs.org/v2/guide/computed.html
quelle
$forceUpdate()
hat NIEMALS am 2.5.17 für mich gearbeitet.Dies scheint eine ziemlich saubere Lösung von matthiasg zu diesem Thema zu sein :
Für meinen Anwendungsfall habe ich einen Vuex-Getter als Requisite in eine Komponente eingespeist. Irgendwie würde Vuex die Daten abrufen, aber die Reaktivität würde nicht zuverlässig eintreten, um die Komponente neu zu rendern. In meinem Fall
key
garantierte das Setzen der Komponente auf ein Attribut auf der Requisite eine Aktualisierung, wenn die Getter (und das Attribut) endgültig aufgelöst wurden.quelle
mounted
wird ausgeführt usw.)Warum?
... tun Sie brauchen , um eine Aktualisierung zu erzwingen?
Vielleicht erkunden Sie Vue nicht von seiner besten Seite:
Siehe Kommentare in der Demo unten. Oder öffnen Sie hier dieselbe Demo in einer JSFiddle .
Um diesen Teil von Vue zu beherrschen, lesen Sie die offiziellen Dokumente zu Reaktivität - Änderungserkennungsvorbehalte . Es ist ein Muss zu lesen!
quelle
Vue.set()
funktioniert auch innerhalb von Komponenten.Bitte lesen Sie dies http://michaelnthiessen.com/force-re-render/
Der schreckliche Weg: die gesamte Seite neu laden
Der schreckliche Weg: den v-if-Hack verwenden
Der bessere Weg: die integrierte forceUpdate-Methode von Vue verwenden
Der beste Weg: Schlüsselwechsel für Ihre Komponente
Ich benutze auch Uhr: in einigen Situationen.
quelle
Versuchen Sie,
this.$router.go(0);
die aktuelle Seite manuell neu zu laden.quelle
Verwenden Sie
vm.$set('varName', value)
. Suchen Sie nach Details in Change_Detection_Caveats .quelle
Sicher .. Sie können einfach das Schlüsselattribut verwenden, um jederzeit ein erneutes Rendern (Neuerstellen) zu erzwingen.
<mycomponent :key="somevalueunderyourcontrol"></mycomponent>
Siehe https://jsfiddle.net/mgoetzke/epqy1xgf/Ein Beispiel finden
Es wurde auch hier diskutiert: https://github.com/vuejs/Discussion/issues/356#issuecomment-336060875
quelle
Verwenden
this.$set(obj,'obj_key',value)
und aktualisieren SieuniqueKey
für jedes Update den Objektwert (obj) für jedes Updatethis.uniqueKey++
es hat bei mir so funktioniert
quelle
Sie können dies also auf zwei Arten tun:
1). Sie können
$forceUpdate()
in Ihrem Methodenhandler verwenden, dh<your-component @click="reRender()"></your-component>
2). Sie können
:key
Ihrer Komponente ein Attribut und eine Erhöhung zuweisen, wenn Sie erneut rendern möchten<your-component :key="index" @click="reRender()"></your-component>
quelle
mit der v-if-Direktive
Wenn Sie also einfach den Wert von truevalue von false auf true ändern, wird die Komponente zwischen div erneut erneut gerendert
quelle
Stoppen Sie die langen Codierungen, um die Komponente neu zu laden / neu zu rendern / zu aktualisieren. Dafür gibt es eine Vue.JS-Methode.
Verwenden Sie einfach das
:key
Attribut.Beispielsweise:
Ich benutze diesen im BS Vue Table Slot. Ich sage, dass ich etwas für diese Komponente tun werde, also mache sie einzigartig.
quelle
Das hat bei mir funktioniert.
Die andere Komponente löst das Update-Stores-List-Ereignis aus, wodurch die aktuelle Komponente erneut gerendert wird
quelle
Ich habe einen Weg gefunden. Es ist ein bisschen hacky, funktioniert aber.
Wo
vm
ist Ihr Ansichtsmodellobjekt undx
ist eine nicht vorhandene Variable?Vue.js beschwert sich darüber im Konsolenprotokoll, löst jedoch eine Aktualisierung aller Daten aus. Getestet mit Version 1.0.26.
quelle
Hat für mich gearbeitet
quelle
Fügen Sie einfach diesen Code hinzu:
Viel Glück
quelle
: key = "$ route.params.param1" Verwenden Sie einfach den Schlüssel mit Ihren Parametern, deren Kinder automatisch neu laden.
quelle
Ich hatte dieses Problem mit einer Bildergalerie, die ich aufgrund von Änderungen, die auf einer anderen Registerkarte vorgenommen wurden, erneut rendern wollte. Also tab1 = imageGallery, tab2 = FavoriteImages
tab @ change = "updateGallery ()" -> Dies zwingt meine v-for-Direktive, die Funktion filteredImages bei jedem Tabwechsel zu verarbeiten.
quelle
Entschuldigung, außer der Methode zum erneuten Laden von Seiten (Flackern), keiner von ihnen funktioniert für mich (: Schlüssel hat nicht funktioniert).
und ich habe diese Methode aus dem alten vue.js Forum gefunden, die für mich funktioniert:
https://github.com/vuejs/Discussion/issues/356
quelle