vue 里面使用axios 和封装的示例代码
vue官方推荐使用axios发送请求
首先上需求
1.需要封装全局调用
2.返回一个promise对象
3.错误全局统一处理
4.除了登录界面token带入头部
5.登录时候把用户信息自动存到vuex里面
首先上封装代码
/** *User:sheyude *Date:2017/8/230023 *Time:下午13:15 * */ importaxiosfrom'axios'; //导入配置文件配置文件就导入的请求的前缀地址 import{defaults}from'@/config/' importstoragefrom'./storage' //这是一个饿了么的弹框 import{Message}from'element-ui'; //路由配置 importrouterfrom'@/router' /** *封装的全局ajax请求 */ classAxios{ constructor(){ this.init(); }; /** *初始化 */ init(){ axios.defaults.baseURL=defaults.baseURL; }; _setUserInfo(data){ //把请求的数据存入vuex store.commit('setUserInfo',data); } /** *判断是否是登录 *@paramurl *@returns{boolean} *@private */ _isLogin(url){ if(url!='/app/login'){ axios.defaults.headers={'x-token':store.state.user.user.token.token}; returnfalse; }else{ returntrue; } } /** *判断是否返回数据 *@paramdata接收到的数据 *@returns{boolean} *@private */ _isStatus(data){ if(data.code==100){ router.push('/login'); Message.error(data.message||'请重新登录!'); returnfalse }else{ returntrue } } /** *全局错误处理 *@paramdata传入错误的数据 *@private */ _error(data){ console.log(data) Message.error('网络错误!'); } /** *GET请求{es6解构赋值} *@paramtype包含url信息 *@paramdata需要发送的参数 *@returns{Promise} *@constructor */ HttpGet({url},data){ console.log(data) //创建一个promise对象 this._isLogin(url) this.promise=newPromise((resolve,reject)=>{ axios.get(url,{params:data}) .then((data)=>{ //console.log(data) if(this._isStatus(data.data)){ resolve(data.data); } }) .catch((data)=>{ this._error(data); }) }) returnthis.promise; }; /** *POST请求 *@paramtypeObject包含url信息 *@paramdataObject需要发送的参数 *@paramurlDataObject需要拼接到地址栏的参数 *@returns{Promise} *@constructor */ HttpPost({url},Data,urlData){ //判断是否加头部 this._isLogin(url); //创建一个promise对象 this.promise=newPromise((resolve,reject)=>{ for(constiteminurlData){ url+='/'+urlData[item]; }; axios.post(url,Data) .then((data)=>{ //是否请求成功 if(this._isStatus(data.data)){ //是否需要存数据 if(this._isLogin(url)){ this._setUserInfo(data.data) }; resolve(data.data) }; }) .catch((data)=>{ this._error(data); }) }) returnthis.promise; }; }; exportdefaultnewAxios();
调用方式
this.$axios.HttpPost(this.audit.auditGet,this.params) .then((data)=>{ this.pageData=data.data })
接收2个参数
1url地址
2需要传递的参数
我目前全局注册了使用需要挂载到vue原型
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。