在Vuejs中全局导入Axios方法

Kit*_*Kit 6 vue.js axios vuejs2

这是我的〜/ plugins/axios.js文件:

import axios from 'axios'

let api = axios.create({
  baseURL: 'http://localhost:8000/api/v1/'
})

export default api
Run Code Online (Sandbox Code Playgroud)

当我想在每个组件中使用axios时,我必须写下这一行:

import api from '~/plugins/axios

我如何在全球范围内配置它,只需编写$ api?

Fro*_*dor 19

你可以创建一个插件并在你的main.js文件中使用它(如果你使用像vue-cli这样的东西)

import axios from 'axios'

Vue.use({
    install (Vue) {
    Vue.prototype.$api = axios.create({
      baseURL: 'http://localhost:8000/api/v1/'
    })
  }
})

new Vue({
    // your app here
})
Run Code Online (Sandbox Code Playgroud)

现在,您可以this.$api.get(...)对每个组件方法执行操作

在此处阅读有关Vue插件的更多信息:https://vuejs.org/v2/guide/plugins.html

提供/注入也可以是一个选项:https://vuejs.org/v2/api/#provide-inject


Vir*_*tel 6

浏览器中有一个窗口对象可供您使用。您可以根据自己的要求积极利用它。

在 main.js 文件中

import axiosApi from 'axios';

const axios = axiosApi.create({
    baseURL:`your_base_url`,
    headers:{ header:value }
});

//Use the window object to make it available globally.
window.axios = axios;
Run Code Online (Sandbox Code Playgroud)

现在在你的 component.vue

methods:{
    someMethod(){
        axios.get('/endpoint').then(res => {}).catch(err => {});
    }
}
Run Code Online (Sandbox Code Playgroud)

这基本上就是我在我的项目中全局使用 axios 的方式。此外,这也是 Laravel 使用它的方式。

  • 污染全局命名空间没有意义,这真的是不好的做法。 (5认同)
  • @PaulBrunache :我不认为这是一种不好的做法。Axios 实例可以在其所有组件之间全局共享,您甚至可以拥有全局拦截器和中间件,用于请求和响应以追加或过滤某些请求类型。此外,Laravel 的创建者在 Laravel 核心文件中以相同的方式执行此操作。你可以在这里检查 https://github.com/laravel/laravel/blob/master/resources/js/bootstrap.js (2认同)
  • 将它导入到您需要的地方并没有什么坏处。让它全球化似乎是一种懒惰。然而,留在 vues 生态系统中将是一个更好的解决方案,通过插件,或者简单地覆盖 vue 的 http 实例,你可以这样做。$http ... (2认同)