如何在 main.js 中使用 Axios
2020-11-20
7638
我正在学习 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)
那么如何在 main.js 文件中添加一些其他“用途”?这当然非常基础,但我是初学者。
2个回答
您正在使用 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
Boussadjra Brahim
2020-11-20
注意:以下代码适用于 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
的组件中使用。由于它被分配为原型变量,因此它被视为单例(它在任何地方都重复使用),因此您可以在将
axios
变量分配给
Vue.prototype.$http
之前向其添加所需的任何选项。
此外:
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);
Flame
2020-11-20