vue-router路由參數刷新消失的問題解決方法詳解
本篇文章主要介紹了vue-router路由參數刷新消失的問題解決方法,具有一定的參考價值,有興趣的小夥伴們可以參考一下
場景: vue-router實作的單頁應用,登入頁呼叫登入介面後,伺服器傳回使用者訊息,然後透過router.push({name: 'index', params: res.data})傳給首頁組件,並在主頁顯示資料。但是刷新頁面後,資料就消失了。
解決方案:
1、session&伺服器渲染
傳統的方案是,登入頁和主頁是單獨的兩個頁面,登入成功後伺服器產生使用者資訊對應的session,然後渲染主頁數據,並透過回應頭將sessionid傳給瀏覽器並產生相應的 cookie檔案。這樣下次請求頁面時,瀏覽器會在http header帶上對應的cookie,然後伺服器根據cookie中的sessionid判斷使用者是否登錄,再顯示使用者資料。
如果專案採用前後端分離思想,伺服器只提供接口,不進行伺服器渲染,那麼這種辦法是行不通了。
2、$route.query
#我們可以在路由跳轉的時候帶上登入請求的參數:
router.push({name:'index', query:{username: 'xxx', password: 'xxxxxx'}}) ... this.$ajax({ url: 'xxx', method: 'post', data: { username: this.$route.query.username, password: this.$route.query.password } })
這樣登入參數會被保存在url中,像這樣:“http://xxx.xxx.xxx/index?username=xxx&password=xxxxxx”,然後在created鉤子中呼叫登入介面來傳回資料。
即使密碼進行了md5加密,將使用者名稱密碼這類敏感資訊放在url中肯定也是不合理。
3、cookie
另一個辦法是把登入參數存入cookie,然後在created鉤子中取得cookie中存的信息,再調用登入介面。將使用者名稱密碼存入cookie中同樣不合理,改進版是登入成功後伺服器回傳一個token,在有效期限內透過token取得使用者資料。
cookie存取資料比較麻煩,因為cookie中鍵值對是字串並以 "=" 鏈接,需要額外寫入操作cookie的方法。
<script> function setCookie (name, value, exdays) { let date = new Date() date.setTime(date.getTime() + (exdays * 24 * 60 * 60 * 1000)) let expires = "expires=" + date.toGMTString() document.cookie = name + "=" + value + "; " + expires } function getCookie (name) { name = name + "=" let cookieArr = document.cookie.split(';') for (let i = 0; i < cookieArr.length; i++) { let cookie = cookieArr[i].trim() if (cookie.indexOf(name) === 0) { return cookie.slice(name.length) } } return "" }
4、HTML5 Web存儲
#提到Web存儲,潛意識肯定覺得很多瀏覽器都不支持,其實IE8以上都支援localStorage和sessionStorage了。 Vue專案最低支援IE9,所以可以放心的使用Web儲存。
localStorage儲存資料沒有時間限制,不主動刪除就不會失效。而sessionStorage是在頁面或瀏覽器關閉時就會失效,適合本場景應用。
我們可以把token資訊存在sessionStorage中,然後每次刷新頁面透過token請求資料;但是既然能夠把token儲存到本地,為什麼不直接把常用的資料直接儲存到本地呢?利用本地數據,可以減少客戶端網路請求,還可以降低伺服器負擔。
由於localStorage和sessionStorage是唯讀的,不能直接將其指向一個物件。也不能利用Object.assign()複製對象,因為值會變成字串"[object Object]",所有隻有透過循環為 sessionStorage 新增屬性了。
... for (var key in res.data.customer) { sessionStorage[key] = res.data.customer[key] } ...
以上是我最近工作遇到的問題,最後採用的方案是使用sessionStorage儲存資料。
以上是vue-router路由參數刷新消失的問題解決方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

當您在iPhone上瀏覽網頁時,載入的內容會暫時存儲,只要瀏覽器應用程式保持開啟。然而,網站會定期更新內容,因此刷新頁面是清除舊資料並查看最新發佈內容的有效方法。這樣,您可以始終獲得最新的資訊和體驗。如果您想在iPhone上刷新頁面,以下貼文將向您解釋所有方法。如何在Safari上刷新網頁[4種方法]有幾種方法可以刷新您在iPhone上的Safari瀏覽器App上查看的頁面。方法1:使用「刷新」按鈕刷新您在Safari瀏覽器上開啟的頁面的最簡單方法是使用瀏覽器標籤列上的「刷新」選項。如果Safa

您的Windows11/10PC上的F5鍵是否無法正常運作? F5鍵通常用於刷新桌面或資源管理器或重新載入網頁。然而,我們的一些讀者報告說,F5鍵正在刷新他們的計算機,並且無法正常工作。如何在Windows11中啟用F5刷新?要刷新您的WindowsPC,只需按下F5鍵即可。在某些筆記型電腦或桌上型電腦上,您可能需要按下Fn+F5組合鍵才能完成刷新操作。為什麼F5刷新不起作用?如果按下F5鍵無法刷新您的電腦或在Windows11/10上遇到問題,可能是因為功能鍵被鎖定。其他潛在原因包括鍵盤或F5鍵

不知道大家有沒有遇過早上起來打開電腦,發現電腦的桌面圖示全都不見了,這個時候不要慌,可能是你快捷鍵把桌面的圖示的刪除了,這個可以直接在回收站恢復就可以了,如果不是,還可以查看顯示圖示的方法恢復,具體的步驟下面一起來看看。 win10桌面圖示全部消失的恢復方法1、如果桌面只剩下一個回收站,那麼是有可能你把所有轉面快捷鍵都刪除了。這時候你點開回收站看是否能找到刪除的捷徑。 2.如果看到有你刪除的快捷方式,那麼就選取所有快捷方式,點選滑鼠右鍵選擇還原。 3.也可以直接點選滑鼠右鍵,點選撤銷刪除。這樣所有

Vue應用程式中遇到vue-router的錯誤「NavigationDuplicated:Avoidedredundantnavigationtocurrentlocation」–怎麼解決? Vue.js作為快速且靈活的JavaScript框架在前端應用開發中越來越受歡迎。 VueRouter是Vue.js的一個程式碼庫,用來進行路由管理。然而,有時

很多用戶都回饋說win7無線網路適配器消失了,遇到這種情況很可能是網卡或是網卡驅動出現了問題,我們只需要修復一下網卡驅動或更換一個好的網卡就可以解決。 win7無線網路適配器消失了1、首先右鍵開始按鍵,選擇“裝置管理員”2、接著我們找到“網路介面卡”,右鍵可以選擇先更新一下驅動,或是先停用裝置再啟用,也可以在這裡點擊“屬性”3、點擊屬性之後,再點擊上方的“驅動程式”,在這裡點擊“更新驅動程式”4、點擊後這裡再選擇”自動搜尋更新驅動檔案“5、完成之後也可以把電腦的網絡重置一下。首先還是按win

頁面刷新在我們日常的網路使用中非常常見,當我們訪問一個網頁後,有時會遇到一些問題,例如網頁加載不出來或顯示不正常等。這時候我們通常會選擇刷新頁面來解決問題,那麼要如何快速刷新頁面呢?下面我們就來探討頁面刷新的快捷鍵。頁面刷新快捷鍵是一種透過鍵盤操作來快速刷新目前網頁的方法。在不同的作業系統和瀏覽器中,頁面刷新的快捷鍵可能有所不同。下面我們以常見的W

Vue和Vue-Router:如何在元件之間共用資料?簡介:Vue是一個流行的JavaScript框架,用於建立使用者介面。 Vue-Router是Vue的官方路由管理器,用於實現單一頁面應用程式。在Vue應用中,元件是建構使用者介面的基本單位。在許多情況下,我們需要在不同的元件之間共享資料。本文將介紹一些方法,幫助你在Vue和Vue-Router中實現資料共享,以及
