Lebih
Anda dapat memaksa Vue.js untuk isi ulang/re-render?
Hanya pertanyaan singkat.
Anda dapat memaksa Vue.js untuk reload/menghitung ulang semuanya? Jika demikian, bagaimana?
178
16
Coba ini mantra sihir:
Tidak perlu untuk membuat setiap gantung vars :)
Update: saya menemukan solusi ini ketika saya mulai kerja dengan VueJS. Namun eksplorasi lebih lanjut membuktikan pendekatan ini sebagai penopang. Sejauh yang saya ingat, di saat aku menyingkirkan itu hanya menempatkan semua sifat yang gagal untuk me-refresh secara otomatis (sebagian besar bersarang orang-orang) menjadi computed properti.
Info lebih lanjut di sini: https://vuejs.org/v2/guide/computed.html
Ini sepertinya solusi yang bersih dari matthiasg pada masalah ini:
Saya menggunakan hal ini, saya makan Vuex pengambil menjadi komponen sebagai prop. Entah bagaimana Vuex akan mengambil data tersebut tetapi reaktivitas tidak't andal menendang ke rerender komponen. Dalam kasus saya, pengaturan komponen
kunci
untuk beberapa atribut pada prop dijamin menyegarkan ketika getter (dan atribut) akhirnya diselesaikan.Mengapa?
...apakah anda butuh ** untuk memaksa update?
Mungkin anda tidak menjelajahi Vue yang terbaik:
Lihat komentar pada demo di bawah ini. Atau buka [sama demo di a JSFiddle di sini][1].
Untuk menguasai hal ini bagian dari Vue, cek Resmi Docs pada Reaktivitas - Perubahan Deteksi Peringatan. Ini adalah harus dibaca!
Gunakan
vm.$set('varName', nilai)
. Lihat detail ke Change_Detection_Caveats.Silahkan baca ini http://michaelnthiessen.com/force-re-render/
Mengerikan cara: reload seluruh halaman
Mengerikan cara: menggunakan v-apakah hack
Cara yang lebih baik: menggunakan Vue built-in forceUpdate metode
Cara terbaik: kunci-perubahan pada komponen
Saya juga menggunakan watch: dalam beberapa situasi.
Cobalah untuk menggunakan
ini.$router.pergi(0);
untuk secara manual reload halaman saat ini.Yakin .. anda hanya dapat menggunakan atribut kunci untuk memaksa re-render (rekreasi) di setiap waktu.
<mycomponent :kunci="somevalueunderyourcontrol"></mycomponent>
Lihat https://jsfiddle.net/mgoetzke/epqy1xgf/ untuk contoh
Itu juga dibahas di sini: https://github.com/vuejs/Discussion/issues/356#issuecomment-336060875
menggunakan v-jika direktif
Jadi hanya dengan mengubah nilai trulyvalue dari false ke true akan menyebabkan komponen antara div untuk rerender lagi
Saya menemukan sebuah cara. It's sedikit hacky tetapi bekerja.
Di mana
vm
yang anda lihat-model obyek, danx
adalah tidak ada variabel.Vue.js akan mengeluh tentang hal ini di console log tetapi tidak memicu refresh untuk semua data. Diuji dengan versi 1.0.26.
Ini telah bekerja untuk saya.
Komponen lain api refresh-toko-daftar acara yang akan menyebabkan komponen arus untuk rerender
selain itu menggunakan
ini.$set(obj,'obj_key',nilai)
dan updateuniqueKey
untuk setiap update di objek (obj) nilai untuk setiap updateini.uniqueKey++
ini bekerja untuk saya dengan cara ini
Dalam rangka ulang/re-render/refresh komponen, berhenti lama codings. Ada Vue.JS cara untuk melakukan itu.
Hanya menggunakan
:key
atribut.Misalnya:
``
``Saya menggunakan yang satu di B Vue Slot Meja. Mengatakan bahwa aku akan melakukan sesuatu untuk komponen ini sehingga membuatnya unik.
Cara lain adalah dengan melibatkan
vue-router
yang biasanya digunakan pula dalam sebagian besar aplikasi.Misalnya, anda perlu me-refresh/penyebab update kait' eksekusi pada semua/hanya beberapa komponen setelah masuk ke halaman. Yang dapat anda tertarik dalam memperbarui bukan rute komponen (tidak digunakan dalam routing bagian sebagai komponen's nilai properti), sehingga navigasi penjaga tidak akan memicu. Juga komponen yang dapat digunakan kembali, maksud saya Vue dapat mengambilnya dari cache menghindari memicu siklus hidup kait. Jadi, dalam kasus seperti itu anda masih dapat mencapai tujuan dengan melewati unik nilai dari router ke rute komponen seperti
Maka anda harus menerima prop ini seperti
alat peraga: ['timestamp']
di rute komponen dan menyebarkannya ke anak dalam komponen-komponen yang update anda tertarik. Kemudian gunakan itu ada sebagai atribut pada elemen atau di dalam tag terlihat. Jika anda don't menggunakannya di mana saja di template, itu tidak akan menimbulkan update, jika anda lakukan - setiap kali anda menekan rute itu nilai unik yang dihasilkan dan berlalu ke rute komponen dan anak-anak di mana anda dapat menyebabkan mereka update dengan menggunakan dilewatkan melalui alat peraga nilai dalam template.:kunci="$route.params.param1" hanya menggunakan kunci dengan anda setiap params auto reload anak-anak..
Bekerja untuk saya
Aku punya masalah ini dengan sebuah galeri gambar yang saya ingin rerender karena perubahan yang dibuat pada tab yang berbeda. Jadi tab1 = imageGallery, tab2 = favoriteImages
tab @perubahan="updateGallery()" -> ini pasukan saya v-untuk direktif untuk proses filteredImages fungsi setiap kali saya beralih tab.