axios是一个库,并不是vue中的第三方插件,使用时不能通过Vue.use()安装插件,需要在原型上进行绑定。
Vue.prototype.$axios = axios
vue-axios是将axios集成到Vuejs的小包装器,可以像插件一样进行安装
import Vue from 'vue' import axios from 'axios' import VueAxios from 'vue-axios' Vue.use(VueAxios, axios)
虽然在实际使用上没有差别,但推荐使用vue-axios,因为直接安装的方式更符合Vue的使用规范,绑定方式命名的变量名($axios)因人而异,辨识度不高。
axios封装
在文件app.js中简单封装axios请求函数
import Vue from 'vue'
import qs from 'qs'
export default {
// 请求函数
request (url, params = {}) {
return new Promise((resolve, reject) => {
Vue.axios.post(url, qs.stringify(params))
.then((res) => {
resolve(res.data)
})
})
},
}
注意:qs模块是防止跨域时,post请求转变成options请求
另外: qs.stringify(params)使用时需要注意图片上传的情况,上传以formData形式上传,不能使用qs.stringify(params),应该直接传params
import Vue from 'vue'
import qs from 'qs'
export default {
// 请求函数
request (url, params = {}) {
let _params = null
if (params instanceof FormData) {
_params = params
}
else {
_params = qs.stringify(params)
}
return new Promise((resolve, reject) => {
Vue.axios.post(url, _params )
.then((res) => {
resolve(res.data)
})
})
},
}