axios实现vue异步请求 + 封装
安装axios && vue-axios : npm install –save axios vue-axios
1.封装不同类型的请求(get,post..),api/helpers.js
配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| import Vue from "vue"; import axios from "axios"; import VueAxios from "vue-axios"; Vue.use(VueAxios, axios); class request { constructor() { this.urlMap = { development: '/dev', production: '/product' } } Get(obj) { return new Promise((resolve, reject) => { Vue.axios( Object.assign({}, { method: "get", headers: { "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" }, baseURL: this.urlMap[process.env.NODE_ENV] }, obj) ).then((res) => { resolve(res.data) }).catch((e) => { reject(e) }) }) } Post(obj) { return new Promise((resolve, reject) => { Vue.axios( Object.assign({}, { method: "post", headers: { "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" }, baseURL: this.urlMap[process.env.NODE_ENV], transformRequest: [(data) => { let rData = '' for (let i in data) { rData += encodeURIComponent(i) + '=' + encodeURIComponent(data[i]) + '&' } return rData.substr(0,rData.length-1) }] }, obj) ).then((res) => { resolve(res.data) }).catch((e) => { reject(e) }) }) } } export { request }
|
2.具体某接口的请求封装:api/indexApi.js配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| import {request} from '../js/helper'; class homeApi extends request { constructor() { super() } getList(data, handle) { this.Get({ url: '/List?page=' + data.pageId }).then((res) => { handle(res) }).catch((e) => {
}) } getOther(data, handle) { this.Post({ url: '/getOther' ,data:'mobile='+data.mobile}).then((res) => { handle(res) }).catch((e) => {
}) } } export { homeApi }
|
3.封装后的具体应用:app.vue:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <template> <div class="login-wrap">121212</div> </template>
<script> import {homeApi} from "../assets/api/indexApi"; const Api = new homeApi() export default { data() { return {}; }, mounted() { Api.getList( { pageId: 1 }, res => { console.log(res) } ); Api.getOther( { mobile:XXXXXXXX }, (res)=>{ console.log(res) } ) } }; </script>
|
- 题外:
export也可以写成export default XXX,
如:export {homeApi} = export default homeApi
引用时写成:
import homeApi from "../assets/api/indexApi";
export
可以写多个,export default
只能写一个,所以这就是为什么export
输出的是对象,而export default
输出的是变量或者类,
然后引用import
的时候也同理使用export
输出时,引用的是对象,而使用export default
输出时,引用的是变量或者类
export
可以只输出需要用到的方法,export default
则是全部输出