場景:vue-router實現(xiàn)的單頁應(yīng)用,登錄頁調(diào)用登錄接口后,服務(wù)器返回用戶信息,然后通過router.push({name: 'index', params: res.data})傳給主頁組件,并在主頁顯示數(shù)據(jù)。但是刷新頁面后,數(shù)據(jù)就消失了。

解決方案:

1、session&服務(wù)器渲染

傳統(tǒng)的方案是,登錄頁和主頁是單獨的兩個頁面,登錄成功后服務(wù)器生成用戶信息對應(yīng)的session,然后渲染主頁數(shù)據(jù),并通過響應(yīng)頭將sessionid傳給瀏覽器并生成相應(yīng)的cookie文件。這樣下次請求頁面時,瀏覽器會在http header帶上相應(yīng)的cookie,然后服務(wù)器根據(jù)cookie中的sessionid判斷用戶是否登錄,再顯示用戶數(shù)據(jù)。
如果項目采用前后端分離思想,服務(wù)器只提供接口,不進(jìn)行服務(wù)器渲染,那么這種辦法是行不通了。

2、$route.query

我們可以在路由跳轉(zhuǎn)的時候帶上登錄請求的參數(shù):

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
  }
})

這樣登錄參數(shù)會被保存在url中,像這樣:“http://xxx.xxx.xxx/index?username=xxx&password=xxxxxx”,然后在created鉤子中調(diào)用登錄