Krótkie pytanie.
Czy możesz zmusić Vue.js
do ponownego załadowania / ponownego obliczenia wszystkiego? Jeśli tak to jak?
javascript
vue.js
Dave
źródło
źródło
Odpowiedzi:
Wypróbuj to magiczne zaklęcie:
Nie trzeba tworzyć żadnych wiszących stojaków :)
Aktualizacja: Znalazłem to rozwiązanie, kiedy zacząłem pracować z VueJS. Jednak dalsze badania potwierdziły to podejście jako kulę. O ile pamiętam, po pewnym czasie się go pozbyłem, po prostu umieszczając wszystkie właściwości, które nie odświeżyły się automatycznie (głównie te zagnieżdżone) w właściwościach obliczeniowych.
Więcej informacji tutaj: https://vuejs.org/v2/guide/computed.html
źródło
$forceUpdate()
NIGDY nie działała dla mnie 2.5.17.Wydaje się, że to całkiem czyste rozwiązanie Matthiasga w tej sprawie :
W moim przypadku użyłem gettera Vuex do komponentu jako rekwizytu. Jakoś Vuex pobierałby dane, ale reaktywność nie uruchamiałaby się rzetelnie w celu ponownego wysłania komponentu. W moim przypadku ustawienie komponentu
key
na jakiś atrybut rekwizytu gwarantowało odświeżenie, gdy gettery (i atrybut) w końcu zostały rozwiązane.źródło
mounted
zostanie uruchomione itp.)Czemu?
... czy musisz wymusić aktualizację?
Być może nie eksplorujesz Vue w najlepszym wydaniu:
Zobacz komentarze w pokazie poniżej. Lub otwórz to samo demo w JSFiddle tutaj .
Aby opanować tę część Vue, sprawdź oficjalne dokumenty dotyczące reaktywności - zastrzeżenia dotyczące wykrywania zmian . To trzeba przeczytać!
źródło
Vue.set()
działa również wewnątrz komponentów.Proszę przeczytać to http://michaelnthiessen.com/force-re-render/
Okropny sposób: przeładowanie całej strony
Okropny sposób: użycie hakowania v-if
Lepszy sposób: użycie wbudowanej metody forceUpdate Vue
Najlepszy sposób: zmiana klucza w komponencie
Używam również zegarka: w niektórych sytuacjach.
źródło
Spróbuj użyć
this.$router.go(0);
do ręcznego ponownego załadowania bieżącej strony.źródło
Zastosowanie
vm.$set('varName', value)
. Sprawdź szczegóły w Change_Detection_Caveats .źródło
Jasne ... możesz po prostu użyć atrybutu kluczowego, aby wymusić ponowne renderowanie (odtwarzanie) w dowolnym momencie.
<mycomponent :key="somevalueunderyourcontrol"></mycomponent>
Zobacz https://jsfiddle.net/mgoetzke/epqy1xgf/ na przykład
Omówiono również tutaj: https://github.com/vuejs/Discussion/issues/356#issuecomment-336060875
źródło
wraz z nim używaj
this.$set(obj,'obj_key',value)
i aktualizujuniqueKey
dla każdej aktualizacji wartości obiektu (obj) dla każdej aktualizacjithis.uniqueKey++
działało dla mnie w ten sposób
źródło
Więc możesz to zrobić na dwa sposoby,
1). Możesz użyć
$forceUpdate()
w swoim module obsługi metody, tj<your-component @click="reRender()"></your-component>
2). Możesz nadać
:key
atrybut swojemu komponentowi i zwiększyć go, gdy chcesz ponownie wysłać<your-component :key="index" @click="reRender()"></your-component>
źródło
za pomocą dyrektywy v-if
Tak więc po prostu poprzez zmianę wartości truevalue z false na true spowoduje ponowne przesłanie komponentu między div
źródło
Aby ponownie załadować / ponownie renderować / odświeżyć komponent, zatrzymaj długie kodowanie. Jest na to sposób Vue.JS.
Wystarczy użyć
:key
atrybutu.Na przykład:
Używam tego w automacie stołowym BS Vue. Mówiąc, że zrobię coś dla tego komponentu, więc uczyń go wyjątkowym.
źródło
To zadziałało dla mnie.
Drugi komponent uruchamia zdarzenie refresh-przechowuje listę, spowoduje ponowne wysłanie bieżącego komponentu
źródło
Znalazłem drogę. Jest trochę zuchwały, ale działa.
Gdzie
vm
jest twój obiekt modelu widoku, ix
nie istnieje zmienna.Vue.js będzie narzekać na to w dzienniku konsoli, ale powoduje odświeżenie wszystkich danych. Testowane z wersją 1.0.26.
źródło
Pracował dla mnie
źródło
po prostu dodaj ten kod:
Powodzenia
źródło
: key = "$ route.params.param1" po prostu użyj klucza z dowolnymi parametrami, jego automatyczne ładowanie dzieci.
źródło
Miałem ten problem z galerią obrazów, którą chciałem ponownie wysłać ze względu na zmiany wprowadzone na innej karcie. Tak więc tab1 = imageGallery, tab2 = favouriteImages
tab @ change = "updateGallery ()" -> to zmusza moją dyrektywę v-for do przetwarzania funkcji filterImages za każdym razem, gdy przełączam tabulatory.
źródło
przepraszam chłopaki, z wyjątkiem metody przeładowania strony (migotanie), żaden z nich nie działa dla mnie (: klucz nie działał).
i znalazłem tę metodę ze starego forum vue.js, które działa dla mnie:
https://github.com/vuejs/Discussion/issues/356
źródło