vue路由傳參刷新后數(shù)據(jù)丟失問題及解決
vue路由傳參刷新后數(shù)據(jù)丟失
出現(xiàn)刷新后數(shù)據(jù)丟失的情況可分為:
- 1、路由傳參;
- 2、從vuex獲取參數(shù)
首先說一下:
1、路由傳參
路由傳參可分為query傳參和params傳參
(1)、query傳參,參數(shù)會在地址欄中顯示,如果你傳的是字符串,刷新后頁面的數(shù)據(jù)是不會丟失的,如果傳的是對象或者是數(shù)組,那么刷新后,頁面的數(shù)據(jù)就會丟失,此時解決的方法是,將復(fù)雜數(shù)據(jù)類型,傳的時候轉(zhuǎn)化成字符串,子組件接受的時候再轉(zhuǎn)化過來,這樣刷新后就不會丟失啦
(2)、params傳參,無論是你參數(shù)是字符串還是復(fù)雜數(shù)據(jù)類型,刷新后子組件的頁面數(shù)據(jù)都會丟失
解決辦法:
使用params中的路由匹配
使用方式:在router.js,即匹配路由規(guī)則的位置,加上占位符即可
{ path: '/index/:num/:name', name: 'index', component: Index }
params中的參數(shù)名稱需要和占位符的名稱一致即可
獲取參數(shù),還是和獲取params中參數(shù)一致:this.$route.params.name
這樣的話,參數(shù)就會出現(xiàn)在url中,格式為:url/num/name,這種方式將參數(shù)放在url上,刷新的時候才不會丟失數(shù)據(jù)。
綜上所述,自己的出的一個小結(jié)論:
如果不使用其他方法,只是路由傳參,要想刷新后數(shù)據(jù)不丟失,
你的參數(shù)就要出現(xiàn)再url地址中,雖然params傳遞的參數(shù)不出現(xiàn)在url地址,
但是要想解決params傳參數(shù)據(jù)刷新不丟失,還得把參數(shù)出現(xiàn)在url地址欄中
2、從vuex獲取參數(shù)
頁面刷新store.state中的數(shù)據(jù)消失是不可避免的,那么使用localStorage來避免這個問題。
發(fā)現(xiàn)問題的時候我就考慮到存數(shù)據(jù)在localStorage里,但是一個一個數(shù)據(jù)添加實在是太蠢了。
那么就需要一個全局的方法來,將store的數(shù)據(jù)存儲在localStorage里。
具體的方法也是百度的很好用,也很方便。
在App.vue中,created初始化生命周期中寫入以下方法
自己項目中使用的方法
//在頁面加載時讀取sessionStorage里的狀態(tài)信息 if (sessionStorage.getItem('store')) { this.$store.replaceState( Object.assign( {}, this.$store.state, JSON.parse(sessionStorage.getItem('store')) ) ) } //在頁面刷新時將vuex里的信息保存到sessionStorage里 window.addEventListener('beforeunload', () => { sessionStorage.setItem('store', JSON.stringify(this.$store.state)) })
作者的方法
//在頁面刷新時將vuex里的信息保存到localStorage里 window.addEventListener("beforeunload",()=>{ localStorage.setItem("messageStore",JSON.stringify(this.$store.state)) }) //在頁面加載時讀取localStorage里的狀態(tài)信息 localStorage.getItem("messageStore") && this.$store.replaceState(Object.assign(this.$store.state,JSON.parse(localStorage.getItem("messageStore"))));
兩種方法基本一致
最后說一下,為什么vuex刷新后數(shù)據(jù)會丟失:
其實很簡單,因為store里的數(shù)據(jù)是保存在運行內(nèi)存中的,當(dāng)頁面刷新時,頁面會重新加載vue實例,store里面的數(shù)據(jù)就會被重新賦值
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
el-dialog關(guān)閉再打開后窗口內(nèi)容不刷新問題及解決
這篇文章主要介紹了el-dialog關(guān)閉再打開后窗口內(nèi)容不刷新問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02vue :style設(shè)置背景圖片方式backgroundImage
這篇文章主要介紹了vue :style設(shè)置背景圖片方式backgroundImage,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10Element Carousel 走馬燈的具體實現(xiàn)
這篇文章主要介紹了Element Carousel 走馬燈的具體實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07vue新玩法VueUse工具庫具體用法@vueuse/core詳解
這篇文章主要介紹了vue新玩法VueUse-工具庫@vueuse/core,VueUse不是Vue.use,它是一個基于?Composition?API?的實用函數(shù)集合,下面是具體的一些用法,需要的朋友可以參考下2022-08-08vue/Element?UI實現(xiàn)Element?UI?el-dialog自由拖動功能實現(xiàn)
最近工作上需要在el-dialog基礎(chǔ)上進(jìn)行些功能的改動,下面這篇文章主要給大家介紹了關(guān)于vue/Element?UI實現(xiàn)Element?UI?el-dialog自由拖動功能實現(xiàn)的相關(guān)資料,需要的朋友可以參考下2023-06-06vue中如何使用echarts動態(tài)渲染數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于vue中如何使用echarts動態(tài)渲染數(shù)據(jù)的相關(guān)資料,echarts是一款基于JavaScript的開源可視化圖表庫,它通過簡單的配置即可實現(xiàn)各種各樣的可視化效果,需要的朋友可以參考下2023-11-11Vue實現(xiàn)鼠標(biāo)經(jīng)過文字顯示懸浮框效果的示例代碼
這篇文章主要介紹了Vue實現(xiàn)鼠標(biāo)經(jīng)過文字顯示懸浮框效果,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10