如何在main.js中使用Axios

rdlzhqv9  于 2022-11-05  发布在  iOS
关注(0)|答案(2)|浏览(235)

我正在学习Vue.js。
我有一个运行良好的代码:

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

const app = createApp(App).use(store).use(router)

app.mount('#app')

现在我想添加一些导入,例如'axios'。这段代码不会运行:

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from 'axios'

const app = createApp(App).use(store).use(router).use(axios)

app.mount('#app')

错误为:

Uncaught RangeError: Maximum call stack size exceeded

    at merge (utils.js?c532:276)
    at assignValue (utils.js?c532:282)
    at forEach (utils.js?c532:253)
    at merge (utils.js?c532:291)
    at assignValue (utils.js?c532:282)
    at forEach (utils.js?c532:253)
    at merge (utils.js?c532:291)
    at assignValue (utils.js?c532:282)
    at forEach (utils.js?c532:253)
    at merge (utils.js?c532:291)

那么如何在mainiderjs文件中添加一些其他的“使用”呢?这当然是非常基本的,但我是一个初学者。

rryofs0p

rryofs0p1#

您使用的是vue 3,而axios不是插件(我们无法像app.use()那样注册它),它是一个javascript模块,可以添加到应用示例中,如下所示:

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from 'axios'

const app = createApp(App).use(store).use(router)

app.config.globalProperties.axios=axios

app.mount('#app')

并在子组件中引用它,如:

this.axios
1l5u6lss

1l5u6lss2#

注:以下代码对Vue 2.x有效。自版本3起,一些关于初始化的内容发生了变化(现在需要createApp函数)。

我通常在我的代码中做的如下:

import Vue from 'vue';
import axios from 'axios';

// Add it to Vue prototype (use any variable you like, preferrably prefixed with a $).
Vue.prototype.$http = axios;

// Instantiate the main vue app.
let app = new Vue({
  //
});

这意味着$http对象现在可以在所有使用this.$http的组件中使用。因为它被赋值为原型变量,所以它被认为是一个单例变量(在任何地方都可以重用),所以在将它赋值给Vue.prototype.$http之前,可以向axios变量添加任何所需的选项。
此外:Vue.use()是专门为启用Vue插件而设计的。这意味着给定的参数必须使用这里所描述的https://v2.vuejs.org/v2/guide/plugins.html的语法。由于axios不是一个Vue插件,而只是一个普通的JavaScript库,因此您不能将其与此函数一起使用。
如果您想让它变得特别漂亮(或复杂),可以使用以下语法:

Vue.use({
    install(v) {
        v.prototype.$http = axios;

        // Do other stuff like adding mixins etc.
    }
})

如果您将此代码移到另一个文件,则可能会清除代码,因此它可能会以如下方式结束:

import myCustomAxiosLoader from './bootstrap/axios';
Vue.use(myCustomAxiosLoader);

相关问题