~ 在 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为失败信息
     }
});