91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決刷新頁面vuex數據不消失和不跳轉頁面的問題

發布時間:2021-07-21 10:31:29 來源:億速云 閱讀:169 作者:小新 欄目:web開發

小編給大家分享一下如何解決刷新頁面vuex數據不消失和不跳轉頁面的問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

先說點什么

vuex和路由攔截這一塊搗鼓的有一段時間了,總算是爬出來了,特地來分享一下,首先聲明沒有什么基礎介紹,用的是登錄狀態存儲sessionStorage的方法!!!

進入正題

刷新

刷新相當與重啟項目,之前獲取到的數據也只是通過store暫存起來,項目關閉時就不見了,這有些像電腦重啟,存儲在RAM的數據會消失。但是儲存在sessionstorage、localstorage和cookie里的內容不會消失.

Vuex

方法思路

首先得熟悉vuex,官網中介紹 Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式,也就是說vuex中的store中的數據都是臨時的,都是一些變量,頁面刷新重新加載,所有都清空,并且已經在頁面中沒有進行二次登陸,vuex中就一直是空的,所以就分生出了幾個方法

1.因為sessionstorage(關閉頁面會消失)、localstorage和cookie刷新頁面數據不會消失,所以可以把所有請求到的數據都儲存在里邊,用的時候再取

2.使用vuex插件

3.登錄的時候把token和登錄狀態(自定義的)賦值給sessionstorage,當刷新頁面的時候(路由跳轉)從 sessionstorage中獲取token和登錄狀態賦值給store,就會自己重新請求相關頁面的數據

我思考過后我選擇了方法3,只不過這個方法要和路由攔截結合起來,后面路由完事一起貼代碼

代碼

index

如何解決刷新頁面vuex數據不消失和不跳轉頁面的問題

actions

// 登錄
 Login({ commit, state }, userInfo) {
  return new Promise((resolve, reject) => {
   login(userInfo).then(response => {
    let token = response.data.token;
    commit('SET_TOKEN', token);
    sessionStorage.setItem('token', token);  //獲取到新的token的時候賦值給sessionStorage

    commit('SET_ISLOGIN', true);  // 登錄成功修改store中的登錄狀態
    resolve()
   }).catch(error => {
    reject(error)
   })
  })
 },

路由

簡單介紹: 路由攔截就相當于路由的'生命周期',在路由的不同時間段插入一個方法,可以在此時間段想要做什么事情,本次只在路由跳轉前搞事情,所以只使用router.beforeEach((to, from, next) => { // ... })即可,具體內容官網都很詳細

main.js

router.beforeEach((to, from, next) => {
 let isLogin = sessionStorage.getItem('isLogin');
 let token = sessionStorage.getItem('token');
 let id = sessionStorage.getItem('id');
 if (to.meta.requireAuth) {  // 判斷是否有權限
  if (!store.state.isLogin && !isLogin && to.path !== '/login') {  // store和sessionStorage中登錄狀態都為false并且跳轉到 不是登錄的頁面時 都強行跳轉到登錄頁面  
   next({
    path: '/login',
   });
  } else if (!isLogin && to.path !== '/login') {  // 已經在登錄頁面進入首頁的時候
   sessionStorage.setItem('isLogin', store.state.isLogin);
   next();
  } else if (isLogin && to.path !== '/login') {  // 登錄進入后刷新頁面時
   store.commit('SET_TOKEN', token);
   store.commit('SET_ISLOGIN', isLogin);
   store.commit('SET_ID', id);
   next();
  } else {
   next();
  }
 }
 else {
  next();
 }
});


1.路由攔截我是寫在main.js文件中的,要注意 一定要寫在vue掛載的上面(new Vue)
2.當點擊登錄的時候 actions中的登錄方法要早于路由攔截
3.退出的登錄的時候 不要忘記把sessionStorage里的變量刪除

以上是“如何解決刷新頁面vuex數據不消失和不跳轉頁面的問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

滦南县| 临桂县| 稷山县| 班戈县| 大田县| 资溪县| 高淳县| 广平县| 称多县| 钦州市| 凌海市| 贺兰县| 鹤山市| 和龙市| 海兴县| 灵山县| 桦南县| 崇州市| 额济纳旗| 贵州省| 景宁| 响水县| 无棣县| 鹿邑县| 兴宁市| 罗定市| 邓州市| 义乌市| 逊克县| 巴彦县| 石林| 兰州市| 泾阳县| 威宁| 都江堰市| 桂林市| 金湖县| 吴忠市| 清远市| 汪清县| 江达县|