詳解解決Vue相同路由參數(shù)不同不會刷新的問題
通常情況下我們喜歡設(shè)置keepAlive 包裹 router-view
<div id="app"> <keep-alive> <router-view></router-view> </keep-alive> </div>
同時在created 中觸發(fā)請求,在路由參數(shù)不同的情況下并不會執(zhí)行對應(yīng)的操作。
解決方法:
1、給 router-view 設(shè)置 key 屬性為路由的完整路徑
<keep-alive> <router-view :key="$route.fullPath"></router-view> </keep-alive>
這種方法我覺得應(yīng)該是一勞永逸的方法,可能對性能造成一定損耗。不適用于一個tab切換路由并加載列表的組件,會造成頁面白屏,dev模式不會自動刷新,是個坑
2、官方給出的方法是通過 watch 監(jiān)聽路由變化,做判斷路由路徑然后調(diào)用響應(yīng)的方法
watch: { '$route' () { if (this.$route.path === 'test') { this.test(); } } }
watch: { 'id': { handler: 'test', //調(diào)用方法 immediate: true, //進(jìn)入立即執(zhí)行一次 } },
這兩種方法推薦第一種,第二種需要先對參數(shù)id進(jìn)行賦值
3、通過組件導(dǎo)航守衛(wèi)來設(shè)置對應(yīng)的meta 屬性
beforeRouteEnter: (to, from, next) = > { // 寫在當(dāng)前組件 to.meta.keepAlive = false next() }, beforeRouteLeave: (to, from, next) = > { //寫在前一個組件 to.meta.keepAlive = false next() },
個人比較喜歡第一種方法
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。