首頁 web前端 js教程 vue-router路由參數刷新消失的問題解決方法詳解

vue-router路由參數刷新消失的問題解決方法詳解

Jul 04, 2017 pm 03:04 PM
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(&#39;;&#39;)
  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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1659
14
CakePHP 教程
1415
52
Laravel 教程
1310
25
PHP教程
1258
29
C# 教程
1232
24
在 iPhone 上刷新網頁的 6 種方法 在 iPhone 上刷新網頁的 6 種方法 Feb 05, 2024 pm 02:00 PM

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

F5刷新金鑰在Windows 11中不起作用 F5刷新金鑰在Windows 11中不起作用 Mar 14, 2024 pm 01:01 PM

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

解決win10桌面圖示全部消失的方法 解決win10桌面圖示全部消失的方法 Dec 25, 2023 pm 04:55 PM

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

Vue應用程式中遇到vue-router的錯誤「NavigationDuplicated: Avoided redundant navigation to current location」 – 怎麼解決? Vue應用程式中遇到vue-router的錯誤「NavigationDuplicated: Avoided redundant navigation to current location」 – 怎麼解決? Jun 24, 2023 pm 02:20 PM

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

Win7無線網路介面卡不見了 Win7無線網路介面卡不見了 Dec 23, 2023 pm 05:57 PM

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

如何快速刷新網頁? 如何快速刷新網頁? Feb 18, 2024 pm 01:14 PM

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

一文深入詳解Vue路由:vue-router 一文深入詳解Vue路由:vue-router Sep 01, 2022 pm 07:43 PM

這篇文章帶大家詳解Vue全家桶中的Vue-Router,了解一下路由的相關知識,希望對大家有幫助!

Vue和Vue-Router: 如何在元件之間共用資料? Vue和Vue-Router: 如何在元件之間共用資料? Dec 17, 2023 am 09:17 AM

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

See all articles