vue返回上一頁面時不刷新問題及解決方案
返回上一頁面時不刷新
前景
在日常使用的時候,我們經(jīng)常需要返回上一級頁面的時候,不刷新頁面,保持頁面不變,這里就需要使用以下方法:
思路
因為vue是單頁面應(yīng)用,進入其他頁面時會銷毀該頁面,用keep-alive不讓其刷新,具體實現(xiàn)為:
(1).在App.vue中加入
這里是所有頁面切換到地方,下面代碼分別對不同的設(shè)置,采用不同的渲染方式。
<template> ? <div id="app"> ? ? <!--<router-view/>--> ? ? <!--頁面返回不刷新--> ? ? <keep-alive> ? ? ? <router-view v-if="$route.meta.keepAlive"></router-view> ? ? </keep-alive> ? ? <router-view v-if="!$route.meta.keepAlive"></router-view> ? </div> </template>
(2).index.js頁面
在需要設(shè)置不刷新的頁面中,只需要添加 keepAlive: true就可以。
export default new Router({ ? routes: [{ ? ? path: '/', ? ? name: 'index', ? ? component: index, ? ? meta: { ? ? ? keepAlive: true ? ? } ? },
至此返回上級頁面不刷新功能實現(xiàn):因為在index.vue中,mounted方法只走一次,在瀏覽器上實現(xiàn)了返回原來滾動位置的目的。
說明
備注:一般執(zhí)行完上一步的時候就已經(jīng)實現(xiàn)方法了,如果在手機上測試,發(fā)現(xiàn)沒用:可以試著添加下面的代碼試一下:
//在頁面離開時記錄滾動位置 beforeRouteLeave (to, from, next) { ? ? this.scrollTop = document.documentElement.scrollTop || document.body.scrollTop ? ? next() ? },
//進入該頁面時,用之前保存的滾動位置賦值 beforeRouteEnter (to, from, next) { ? ? next(vm => { ? ? ? document.body.scrollTop = vm.scrollTop ? ? }) ? },
至此完美結(jié)束,算是一個比較常見而且簡單的功能了。
頁面回退后,不刷新問題
問題描述
index頁面中呈現(xiàn)一個item列表,有一個【新增】按鈕,點擊后,跳轉(zhuǎn)到了新增頁面addNewInfo.vue, 保存了新增記錄后,跳轉(zhuǎn)回到index頁面,此時index中的item列表不能刷新。
在index中的created, mounted鉤子中添加了查詢方法,無法觸發(fā)
created() { ?? ?this.queryHandler() }, mounted() { ?? ?this.queryHandler() }
問題解決
查詢了該問題后,得知有兩種方式可以解決該問題
- 使用activated鉤子函數(shù)
- watch中添加對this.$route的監(jiān)聽
兩種方式均可以解決問題,但是個人偏愛第一種,簡單方便
activated顧名思義是激活,也就是進入頁面后立即觸發(fā),然而有個前提,如官網(wǎng)API文檔所說:
被 keep-alive 緩存的組件激活時調(diào)用
當(dāng)前項目使用的vue-element-admin框架,在框架中的AppMain.vue中已經(jīng)在<router-view>外層包括了<keep-alive>:
<template> ? <section class="app-main"> ? ? <transition name="fade-transform" mode="out-in"> ? ? ? <keep-alive :include="cachedViews"> ? ? ? ? <router-view :key="key" /> ? ? ? </keep-alive> ? ? </transition> ? </section> </template>
因此所有的組件目前都是被keep-alive緩存的,符合activated的激活條件. 嘗試后確實有效。
activated() { ?? ?this.queryHandler() }
> 官方API文檔:https://cn.vuejs.org/v2/api/#activated
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue點擊input彈出帶搜索鍵盤并監(jiān)聽該元素的方法
今天小編就為大家分享一篇vue點擊input彈出帶搜索鍵盤并監(jiān)聽該元素的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08關(guān)于this.$refs獲取不到dom的可能原因及解決方法
這篇文章主要介紹了關(guān)于this.$refs獲取不到dom的可能原因及解決方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11Element中el-input密碼輸入框瀏覽器自動填充賬號密碼問題的解決方法
自己寫了一個管理系統(tǒng),登錄成功之后,瀏覽器提示我保存賬號密碼,每次登錄時就會自動回填記住的賬號密碼,方便用戶快速登錄,下面這篇文章主要給大家介紹了關(guān)于Element中el-input密碼輸入框瀏覽器自動填充賬號密碼問題的解決方法,需要的朋友可以參考下2022-09-09Vue Element前端應(yīng)用開發(fā)之echarts圖表
在我們做應(yīng)用系統(tǒng)的時候,往往都會涉及圖表的展示,綜合的圖表展示能夠給客戶帶來視覺的享受和數(shù)據(jù)直觀體驗,同時也是增強客戶認(rèn)同感的舉措之一2021-05-05詳解el Cascader懶加載數(shù)據(jù)回顯示例
這篇文章主要為大家介紹了詳解el Cascader懶加載數(shù)據(jù)回顯示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11