~ 在 vue 中使用 axios
由于 Axios 并不是专门为 vue 制作的插件,并没有按照 vue 插件化的方式编写,因此不能直接使用
Vue.use(axios)的方式来注册插件。So,如何在 vue 组件化当中使用 Axios 呢?
# 将 Axios 写入 vue 原型
可以将 Axios 直接写入到 vue 的原型中,将其作为 vue 的方法来调用:
// main.js //引入axios import axios from "axios"; // 将axios写入原型 Vue.prototype.$axios = axios;然后在其他组件中使用:
// a.vue this.$axios.get(url).then(function(res) { console.log(res); });
# 使用 vue-axios(推荐)
首先安装 vue-axios
npm i -D vue-axios直接引入使用:
// main.js // 引入axios和vue-axios import axios from "axios"; import VueAxios from "vue-axios"; // 挂载 Vue.use(VueAxios, axios);然后,在其他组件中使用:
// a.vue this.axios.get(url).then(function(res) { console.log(res); });
# 工具化和模块化
[1] 在项目中 src 文件夹下,新建 api/index.js 文件,用以配置 axios:
以下 — 配置了 POST、GET、PUT、DELETE 方法,并且自动将 JSON 格式数据转为 URL 拼接的方式;
同时配置了跨域,不需要的话将 withCredentials 设置为 false 即可;
并且设置了默认头部地址为:http://localhost:8080/,这样调用的时候只需写访问方法即可;
// 1.进行相关配置 let http = axios.create({ baseURL: 'http://localhost:8080/', withCredentials: true, headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8' }, transformRequest: [function (data) { let newData = ''; for (let k in data) { if (data.hasOwnProperty(k) === true) { newData += encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) + '&'; } } return newData; }] }); // 2.定义方法 function apiAxios(method, url, params, response) { http({ method: method, url: url, data: method === 'POST' || method === 'PUT' ? params : null, params: method === 'GET' || method === 'DELETE' ? params : null, }).then(function (res) { response(res); }).catch(function (err) { response(err); }) } // 3.导出方法 export default { get: function (url, params, response) { return apiAxios('GET', url, params, response) }, post: function (url, params, response) { return apiAxios('POST', url, params, response) }, put: function (url, params, response) { return apiAxios('PUT', url, params, response) }, delete: function (url, params, response) { return apiAxios('DELETE', url, params, response) } }[2] 在 main.js 文件中引入 api,并将方法实例属性化
// 在main.js 中进行原型装载 import axios from './api' Vue.prototype.$axios=axios; // PUT请求默认会发送两次请求,第一次预检请求不含参数,所以后端不能对PUT请求地址做参数限制[3] 在页面上使用
// 在需要的地方调用即可 this.$axios.post('user/login.do(地址)', { "参数名": "参数值" }, response => { if (response.status >= 200 && response.status < 300) { console.log(response.data);\\请求成功,response为成功信息参数 } else { console.log(response.message);\\请求失败,response为失败信息 } });