vue项目中vux和axios是我们必不可少的两大组件,那么如何更优雅组合使用它们便成为了一个严肃的问题,
vux的官方文档简洁得令人出奇,这也是最让人恼火的地方,为此我研究了很多大神的Demo,提取了和改进了其
中我自认是精华的东西,说实话这部分的教程确实少得可怜,而且很多都是滥竽充数,希望我篇帖子能帮助到更多
的人,少踩一些不必要的坑,技术因分享而变得更有价值
-
安装
axios
npm install axios -s
-
新建
Http.js
class Http { constructor(){ this.Domain = 'https://www.api.com'; } require(options) { if (!options.api) throw new Error('api 不能为空'); if (!options.param) { options.param = {} }; if (!options.methods) { options.methods = 'POST' }; //不传递方法默认为POST return new Promise((resolve,reject) => { return axios({ method: options.methods, url: options.api, baseURL: this.Domain, headers: { 'token': options.param.MemberToken }, data: options.param }).then(response => { if(response.data.Code === 100000){ //请求成功 return resolve(response.data) }else{ console.log(response.data.Msg) return reject(response.data) } },error => { Indicator.close(); console.log(error) return reject() }) }) } } export default Http;
-
新建
API.js
import Http from '@/utils/Http'; // 登录 export const login = (params) => new Http().require({api:'/user/login',param:params});
-
安装
vux
npm install vuex -s
-
创建store文件夹
-
在文件夹下创建
index.js
import Vue from 'vue' import Vuex from 'vuex' import getters from './getters' // 导入模块模型文件 import user from './modules/user' Vue.use(Vuex) const store = new Vuex.Store({ modules: { user }, getters }) export default store
在文件夹下创建
getter.js
在文件夹下创建一个modules文件夹
-
在modules文件夹创建各个模块的模型,这里我们创建一个
user.js
// 导入API.js的 login import { login } from '@/service/API'; // 创建user数据模型 const user = { state: { userInfo: null //用户信息数据 }, mutations: { // 保存用户信息 SET_USERINFO_DATA(state, userInfo) { state.userInfo = userInfo } }, actions: { //登录 login({commit,state}, parameterData) { return new Promise((resolve, reject) => { //调用API.js的 login方法 login(parameterData).then(response => { // 保存到状态机中去 commit('SET_USERINFO_DATA',parameterData) resolve(response) }, err => { reject(err) }) }) } } } export default user
-
-
配置
vuex
,在main.js
中进行配置import Vue from 'vue' import App from './App' import store from '@/store' Vue.config.productionTip = false new Vue({ el: '#app', store, components: { App }, template: '<App/>' })
-
使用使用起来就很简单了,在任意需要的页面引入
<script> import { login } from '@/service/API'; export default { name: 'app', components: {}, mounted() { this.Login(); }, methods:{ // async异步加载的意思 async Login(){ let data = { mobile: "13888888888", password: "E10ADC3949BA59ABBE56E057F20F883E", } let res = this.$store.dispatch('login', data) res.then(res =>{ console.log(res.Data.token) }) } } } </script>
好了装逼到此结束,如有不清楚的可以进QQ群大家一起探讨 384089763