存儲方法:第一種(Vuex)(PS:刷新就清空時使用或者使用eventBus全局變量也行。) 第二種(sessionStorage)(PS:刷新不清空關閉窗口才清空時請用。) 第三種(localStorage)(PS:關閉瀏覽器都不清空時才使用。)
在此之前呢,先簡單了解下他們的操作使用吧!
sessionStorage的操作:
設置:sessionStorage.setItem('userData')
獲取:sessionStorage.getItem('userData')
清除:sessionStorage.clear('userData')
localStorage的操作:
設置:localStorage.setItem('userData')
獲取:localStorage.getItem('userData')
清除:localStorage.removeItem('userData')
做登錄存儲時呢,網上看了很多參考,最后結合這些跟自己的理解整理了一下詳細如下(僅供參考)(另外呢說明一下,我這里采用的是vuex的方法但值是以sessionStorage來存儲賦值):
目錄:(創建store文件夾,再創建store.js文件)
main.js文件下:
store.js文件下:(我這里的變量userData變量的值采用的sessionStorage方法,也可換成常量或者locaStorage方式。)
1 import Vue from "vue"; 2 import Vuex from "vuex"; 3 Vue.use(Vuex); 4 5 export default new Vuex.Store({ 6 state: { 7 userData: sessionStorage.getItem('userData') ? sessionStorage.getItem('userData') : '' 8 }, 9 getters: { 10 11 }, 12 mutations: { 13 setUserData: (state, userData) => { 14 state.userData = userData; 15 sessionStorage.setItem('userData', JSON.stringify(userData)); 16 }, 17 } 18 });
login.vue中登錄成功后:
1.調用setUserData方法修改state中變量userData的值:this.$store.commit('setUserData',res.data);
2.跳轉頁面之前呢,先做個判斷,判斷用戶是否登陸(即使用 router.beforeEach 注冊一個全局前置守衛)
router文件夾下的index.js文件中代碼如下:
1 import Vue from 'vue' 2 import Router from 'vue-router' 3 4 import Login from '@/components/Login/Login' //登錄界面 5 6 Vue.use(Router) 7 8 const router = new Router({ 9 mode: 'history', //去除地址路徑后的#號 10 routes: [ 11 // { 12 // path: '/', 13 // name: 'HelloWorld', 14 // component: HelloWorld 15 // }, 16 { 17 path: '/', 18 name: 'Login', 19 component: Login, 20 meta: { 21 isLogin: false 22 } 23 }, 24 ] 25 }); 26 27 // 導航守衛 28 // 使用 router.beforeEach 注冊一個全局前置守衛,判斷用戶是否登陸 29 router.beforeEach((to, from, next) => { 30 if (to.path === '/') { 31 next(); 32 } else { 33 //非跳轉到登錄界面時,判斷本地存儲userData是否為null或空,為空則跳回到登錄界面,反之到相應的界面(此時有數據)。 34 let userData = JSON.parse(sessionStorage.getItem('userData')); 35 if (userData === null || userData === '') { 36 next('/'); 37 } else { 38 next(); 39 } 40 } 41 }); 42 43 export default router
3.跳轉到主頁面:this.$router.push({path:'../index',query:{data:res.data}}); //此處的query可有可無
4.進入到主頁后,從store中取出用戶的信息userData,並判斷是否需要轉為對象,再賦值用戶的個人中心,
1 // console.log(JSON.parse(sessionStorage.getItem('userData'))) 2 // console.log(typeof(this.$store.state.userData)) 3 4 let userData; 5 if(typeof(this.$store.state.userData) == 'object'){ 6 userData = this.$store.state.userData; 7 }else{ 8 userData = JSON.parse(this.$store.state.userData); 9 } 10
如果有修改個人信息的操作,則在其執行成功后調用store.js文件中的state下的userData變量並判斷是否為對象類型來是否進行轉為對象操作,修改其中需要修改的參數並賦上最新值,並刷新個人信息:
(ps:我這里是修改手機號)
1 let newUserDate; 2 if(typeof(this.$store.state.userData) == 'string'){ 3 newUserDate = JSON.parse(this.$store.state.userData); 4 }else{ 5 newUserDate = this.$store.state.userData; 6 } 7 newUserDate.mobileNo = this.ruleForm.phoneNumber; //修改其中參數的值
8 this.$store.commit('setUserData',newUserDate); //使用該方法調用setUserData更新userData的值 9 this.$refs.head_child.getPersonalInfo(); //刷新個人信息
退出登錄時呢:
1 sessionStorage.clear('userData'); //清空sessionStorage中名為userData的值 2 this.$router.push({path: "/"}); //回到登錄界面
ok,到此為止呢,登陸存儲功能算是實現了。。。