nuxt中刷新頁面后防止store值丟失問題
nuxt刷新頁面后防止store值丟失
配置插件()
plugins: [ {src:'~/plugins/storeCache',ssr: false}, ],
注意:
要禁止服務(wù)端運(yùn)行,不然會(huì)報(bào)錯(cuò),這個(gè)事件是在客戶端添加的,不是在服務(wù)端小渲染的時(shí)候添加的。
在plugins/storeCache.js
寫代碼,如下。
export default function(ctx){ //離開頁面 刷新前 將store中的數(shù)據(jù)存到session window.addEventListener('beforeunload', ()=> { sessionStorage.setItem("storeCache",JSON.stringify(ctx.store.state)) }); //頁面加載完成 將session中的store數(shù)據(jù) window.addEventListener('load', ()=> { let storeCache = sessionStorage.getItem("storeCache") if(storeCache){ // 將session中的store數(shù)據(jù)替換到store中 ctx.store.replaceState(JSON.parse(storeCache)); } }); }
大功告成~
nuxt——讓store持久化,刷新頁面不清除store
我們有時(shí)候在項(xiàng)目中儲(chǔ)存的store數(shù)據(jù)只要一刷新頁面,數(shù)據(jù)就被清空了,在其他頁面加載的時(shí)候就獲取不到數(shù)據(jù)了,但是咱們又沒有辦法控制用戶不允許刷新頁面,所以咱們來解決了它
解決思路
就是利用瀏覽器的本地存儲(chǔ),localStorage或者sessionStorage,監(jiān)聽頁面要離開或者刷新前,將store儲(chǔ)存到本地,下次進(jìn)入頁面的時(shí)候取出來重新賦值給store就可以了
代碼開發(fā)步驟
如下:
第一步:
我們?cè)趐lugins文件中建立一個(gè)store-cache.js文件,在store-cache.js中添加以下代碼:
export default function(ctx) { ? //離開頁面 刷新前 將store中的數(shù)據(jù)存到localStorage ? window.addEventListener('beforeunload', () => { ? ? localStorage.setItem("storeCache", JSON.stringify(ctx.store.state)) ? }); ? // 獲取localStorage中的store數(shù)據(jù) ? let storeCache = localStorage.getItem("storeCache") ? if (storeCache) { ? ? // 將localStorage中的store數(shù)據(jù)替換到store中 ? ? ctx.store.replaceState(JSON.parse(storeCache)); ? } }
第二步:
在nuxt.cofing.js中的plugins中將剛才創(chuàng)建的store-cache.js添加進(jìn)去,如下:
plugins: [ ?? ?{src:'~/plugins/store-cache',ssr:false} ],
注意:
在添加的時(shí)候ssr一定要設(shè)置成false,ssr的作用是控制該文件是否在服務(wù)器端進(jìn)行加載,如果設(shè)置為true的話,這個(gè)js文件就會(huì)在服務(wù)器中直接運(yùn)行了,但是因?yàn)槲覀兊膉s文件中需要用到windows對(duì)象,windows對(duì)象只有在客戶端,也就是咱們的瀏覽器中才會(huì)存在,直接在服務(wù)器中運(yùn)行的話,會(huì)報(bào)錯(cuò),因?yàn)檎也坏絯indows對(duì)象,所以我們需要設(shè)置為false,讓該js到了瀏覽器中后再加載運(yùn)行
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue+elementUi中的table實(shí)現(xiàn)跨頁多選功能(示例詳解)
最近在開發(fā)工業(yè)品超市的后臺(tái)系統(tǒng),遇到一個(gè)需求,就是實(shí)現(xiàn)在一個(gè)table表格中多選數(shù)據(jù),在網(wǎng)上查了好多,有些方法真的是無語,下面通過本文給大家分享vue+elementUi中的table實(shí)現(xiàn)跨頁多選功能,感興趣的朋友跟隨小編一起看看吧2024-05-05快速解決vue動(dòng)態(tài)綁定多個(gè)class的官方實(shí)例語法無效的問題
今天小編就為大家分享一篇快速解決vue動(dòng)態(tài)綁定多個(gè)class的官方實(shí)例語法無效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09VUE中如何調(diào)用高德地圖獲取當(dāng)前位置(VUE2.0和3.0通用)
使用uniapp開發(fā)微信小程序時(shí),多多少少會(huì)遇到獲取當(dāng)前位置的詳細(xì)信息,下面這篇文章主要給大家介紹了關(guān)于VUE中如何調(diào)用高德地圖獲取當(dāng)前位置(VUE2.0和3.0通用)的相關(guān)資料,需要的朋友可以參考下2023-04-045分鐘學(xué)會(huì)Vue動(dòng)畫效果(小結(jié))
這篇文章主要介紹了5分鐘學(xué)會(huì)Vue動(dòng)畫效果(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07vue-cli3在main.js中console.log()會(huì)報(bào)錯(cuò)的解決
這篇文章主要介紹了vue-cli3在main.js中console.log()會(huì)報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04