默认已安装了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来实现,后续再跳坑。函数