默認已安裝了Vuex,包含存儲token/清除token/計算登陸狀態,不包含驗證tokenvue
main.js
引入vueximport Vuex from 'vuex'; Vue.use(Vuex); new Vue({ el: '#app', router, store, //將store注入根節點 components: {App}, template: '<App/>' });
src/
目錄下新建store
文件夾新建四個js文件,以下圖:
vuex
index.js
import Vue from 'vue' import Vuex from 'vuex' import state from './state' import getters from './getters' import mutations from './mutations' Vue.use(Vuex) export default new Vuex.Store({ state, mutations, getters })
state.js
// 若是本地緩存裏有token,就將token賦值 let defaultToken = '' try { if (localStorage.token) { defaultToken = localStorage.token } } catch (e) {} export default { token: defaultToken }
mutation.js
export default { changeToken (state, token) { //登陸或者註冊時,存儲token的方法 state.token = token try { localStorage.token = token } catch (e) {} }, clearToken (state) { //退出登陸時清除token的方法 localStorage.token = '' state.token = '' } }
getters.js
export default { login: state => { // 計算登陸狀態,返回一個boolean值 return state.token !== '' } }
console.log(this.$store.state.token); //打印token值 console.log(this.$store.getters.login); //打印login值 this.$store.commit('clearToken'); // 清除token值
mapState
mapMutations
mapGetters
這三個輔助函數的做用是將vuex內的變量和方法映射爲組件內變量和方法緩存
// 在組件內引入 import { mapState,mapMutations,mapGetters } from 'vuex' computed: { ...mapState(['token']), // 能夠直接使用this.token訪問 ...mapGetters(['login']) //同上 } methods: { ...mapMutations(['clearToken']) // 使用this.clearToken調用 }
若是你須要驗證token的話,須要自行寫一個js,調用接口驗證token,若是token無效則clearToken,在入口頁面調用這個方法,這裏的流程再也不貼上來,須要的朋友能夠自行嘗試。服務器
Vuex由三個部分組成:cookie
store.state.xx
讀取store.commit('xx')
觸發store.getters.xx
訪問以及三個對應的輔助函數app
若是不使用localStorage而是使用cookie來存儲token,就不存在驗證token這一步了,但不少時候因爲服務器端HttpOnly的限制,js獲取不到cookie,這裏建議先使用localStorage來實現,後續再跳坑。函數