1.登陸的時候,在登陸模塊請求接口,然后獲取一個access_token,獲取用戶權限.保存到緩存里面。
2.退出的時候,請求退出接口,把緩存里面的access_token清除。
一旦要在登陸里面做一些行為,比如,在后面新加一些數據傳遞給登陸接口,做數據收集。就要在登陸的Login.vue模塊
里面直接修改。模塊里面的代碼很多。所有的邏輯都混在一起。
所以可以把登陸和退出的變量和行為抽離出來,在狀態管理里統一管理。
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment (state) {
state.count++
}
}
})
把退出,登陸的模塊都封裝在一個狀態模塊上面
const moduleA = {
state: { ... },
mutations: { ... },
actions: { ... },
getters: { ... }
}
const moduleB = {
state: { ... },
mutations: { ... },
actions: { ... }
}
const store = new Vuex.Store({
modules: {
a: moduleA,
b: moduleB
}
})
store.state.a // -> moduleA 的狀態
store.state.b // -> moduleB 的狀態
對用戶權限判斷是否可以進入某個頁面的時候,統一在路由鈎子里進行執行。
比如 登陸進首頁,需要判斷用戶權限,從別的頁面進首頁,仍然要判斷用戶權限。
如果頁面進入分別寫在登陸頁面,和別的頁面,代碼就不好維護,都在vue路由的導航守衛里面進行處理
登陸異步代碼 ,和login模塊里面的回調。
state狀態管理里面, mutations是立即執行的,actions 可以是異步的,所以用actions。
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex);
const loginSet = {
state: {
access_token: null
},
mutations: {
setAccessToken(state, param){
state.access_token = param.value;
}
},
actions: {
loginAsync({ commit }){
return new Promise((resolve, reject)=>{
setTimeout(()=> {
commit({
type: 'setAccessToken',
value: 'ajshdksjjsd' //我隨便寫了幾個值
});
resolve();
}, 1000)
});
}
},
getters: {
}
};
const store = new Vuex.Store({
modules: {
login: loginSet
}
})
export {store};
登陸模塊的調用,異步回調
this.$store.dispatch('loginAsync').then(()=>{
//如果登陸成功了以后,回調
console.log(this.$store.state.login.access_token);
this.$router.push('首頁');
});
