Hanya pertanyaan singkat.
Bisakah Anda memaksa Vue.js
untuk memuat ulang / menghitung ulang semuanya? Jika ya, bagaimana caranya?
javascript
vue.js
Dave
sumber
sumber
Jawaban:
Coba mantra ajaib ini:
Tidak perlu membuat vars gantung :)
Pembaruan: Saya menemukan solusi ini ketika saya baru mulai bekerja dengan VueJS. Namun eksplorasi lebih lanjut membuktikan pendekatan ini sebagai penopang. Sejauh yang saya ingat, dalam beberapa saat saya menyingkirkannya hanya menempatkan semua properti yang gagal menyegarkan secara otomatis (kebanyakan yang bersarang) ke dalam properti yang dihitung.
Info lebih lanjut di sini: https://vuejs.org/v2/guide/computed.html
sumber
$forceUpdate()
tidak pernah bekerja untuk saya di 2.5.17.Ini sepertinya solusi yang cukup bersih dari matthiasg untuk masalah ini :
Untuk kasus penggunaan saya, saya memberi makan pengambil Vuex ke komponen sebagai alat peraga. Entah bagaimana Vuex akan mengambil data tetapi reaktivitas tidak andal menendang untuk merender komponen. Dalam kasus saya, mengatur komponen
key
ke beberapa atribut pada prop dijamin refresh ketika getter (dan atribut) akhirnya diselesaikan.sumber
mounted
akan dijalankan, dll)Mengapa?
... apakah Anda perlu memaksakan pembaruan?
Mungkin Anda tidak menjelajahi Vue yang terbaik:
Lihat komentar di demo di bawah ini. Atau buka demo yang sama di JSFiddle di sini .
Untuk menguasai bagian Vue ini, periksa Dokumen Resmi tentang Reaktivitas - Ubah Peringatan Deteksi . Ini harus dibaca!
sumber
Vue.set()
juga berfungsi di dalam komponen.Silakan baca ini http://michaelnthiessen.com/force-re-render/
Cara mengerikan: memuat ulang seluruh halaman
Cara mengerikan: menggunakan peretasan v-if
Cara yang lebih baik: menggunakan metode forceUpdate yang terintegrasi dengan Vue Cara
terbaik: mengubah kunci pada komponen Anda
Saya juga menggunakan arloji: dalam beberapa situasi.
sumber
Coba gunakan
this.$router.go(0);
untuk memuat ulang secara manual halaman saat ini.sumber
Gunakan
vm.$set('varName', value)
. Cari detail di Change_Detection_Caveats .sumber
Tentu .. Anda cukup menggunakan atribut kunci untuk memaksa render (rekreasi) kapan saja.
<mycomponent :key="somevalueunderyourcontrol"></mycomponent>
Lihat https://jsfiddle.net/mgoetzke/epqy1xgf/ untuk contoh
Itu juga dibahas di sini: https://github.com/vuejs/Discussion/issues/356#issuecomment-336060875
sumber
bersamaan dengan itu gunakan
this.$set(obj,'obj_key',value)
dan perbaruiuniqueKey
untuk setiap pembaruan dalam objek (obj) nilai untuk setiap pembaruanthis.uniqueKey++
ini bekerja untuk saya dengan cara ini
sumber
Jadi ada dua cara Anda bisa melakukan ini,
1). Anda dapat menggunakan
$forceUpdate()
di dalam handler metode Anda yaitu<your-component @click="reRender()"></your-component>
2). Anda dapat memberikan
:key
atribut ke komponen Anda dan meningkatkan ketika ingin rerender<your-component :key="index" @click="reRender()"></your-component>
sumber
menggunakan v-if direktif
Jadi hanya dengan mengubah nilai truevalue dari false ke true akan menyebabkan komponen antara div kembali rerender
sumber
Untuk memuat ulang / merender ulang / menyegarkan komponen, hentikan pengkodean yang panjang. Ada cara Vue.JS untuk melakukan itu.
Cukup gunakan
:key
atribut.Sebagai contoh:
Saya menggunakan yang di BS Vue Table Slot. Memberitahu bahwa saya akan melakukan sesuatu untuk komponen ini jadi buatlah menjadi unik.
sumber
Ini berhasil bagi saya.
Komponen lain yang mengaktifkan event refresh-store-list akan menyebabkan komponen saat ini rerender
sumber
Saya menemukan jalan. Agak berantakan tapi berhasil.
Di mana objek
vm
view-model Anda, danx
merupakan variabel yang tidak ada.Vue.js akan mengeluh tentang hal ini di log konsol tetapi memicu pembaruan untuk semua data. Diuji dengan versi 1.0.26.
sumber
Bekerja untukku
sumber
tambahkan saja kode ini:
Semoga berhasil
sumber
: key = "$ route.params.param1" cukup gunakan kunci dengan params Anda yang mana pun anak-anak memuat ulang secara otomatis ..
sumber
Saya punya masalah dengan galeri gambar yang ingin saya rerender karena perubahan yang dilakukan pada tab yang berbeda. Jadi tab1 = imageGallery, tab2 = favoriteImages
tab @ change = "updateGallery ()" -> ini memaksa direktif v-for saya untuk memproses fungsi filteredImages setiap kali saya mengganti tab.
sumber
maaf kawan, kecuali metode pemuatan ulang halaman (berkedip), tidak ada yang berfungsi untuk saya (: kunci tidak berfungsi).
dan saya menemukan metode ini dari forum vue.js lama yang berfungsi untuk saya:
https://github.com/vuejs/Discussion/issues/356
sumber