请求接口封装为函数
- 将请求接口封装为函数,避免导入接口模块时,一次性请求所有接口
import request from '@/utils/request'
export function loginApi(data) {
return request({
url: '/sys/login',
method: 'post',
data
})
}
export function getUserInfoApi() {
return request({
url: '/sys/profile',
method: 'post',
})
}
存储数据到vuex
import { loginApi, getUserInfoApi } from '@/api/user'
import { getToken, setToken } from '@/utils/auth'
const state = {
token: getToken() || '',
userInfo: {}
}
const getters = {}
const mutations = {
setToken(state, payload) {
state.token = payload
setToken(payload)
},
setUserInfo(state, payload) {
state.userInfo = payload
}
}
const actions = {
login(context, payload) {
return new Promise((resolve, reject) => {
loginApi(payload).then(res => {
const token = res.data.data
context.commit('setToken', token)
resolve(res)
}).catch(err => {
reject(err)
})
})
},
getUserInfo(context, payload) {
getUserInfoApi().then(res => {
const { data } = res.data
context.commit('setUserInfo', data)
})
}
}
export default {
namespaced: true,
state,
getters,
mutations,
actions
}
全局getters
const getters = {
sidebar: state => state.app.sidebar,
device: state => state.app.device,
token: state => state.user.token,
name: state => state.user.userInfo.username
}
export default getters
组件中使用vuex数据
<template>
<div class="navbar">
<h1>{{ name }}</h1>
</div>
</template>
<script>
import { mapGetters, mapActions } from 'vuex'
export default {
computed: {
...mapGetters(['sidebar', 'avatar', 'name'])
},
methods: {
...mapActions('user', ['getUserInfo']),
},
created() {
this.getUserInfo()
}
}
</script>