如何在Vue3中使用Vue.prototype或全局变量?

Like the title, I want to add Axios into Vue prototype. So when I want to use it, I can use it like this.$axios instead of importing it every time.

CODE:

//plugins/axios.ts

import axios from 'axios'
import router from '../router/index'

const errorHandle = (): void => {};

const instance = axios.create({
  // baseURL: process.env.NODE_ENV == 'development' ? '' : ''
  baseURL: 'http://localhost:3000',
  timeout: 1000 * 12
});

instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'

export default instance
import { createApp } from 'vue'
import App from './App.vue'
import installElementPlus from './plugins/element'
import instance from './plugins/axios'
import router from './router'

const app = createApp(App).use(router)
installElementPlus(app)
// app.config.globalProperties.http = instance
app.config.globalProperties.$axios= instance
app.mount('#app')

However, there is a problem when I try to use it like this: this.$axios.

TS2339: Property '$axios' does not exist on type 'ComponentPublicInstance<{}, {}, {}, {}, {}, EmitsOptions, {}, {}, false, ComponentOptionsBase<{}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, EmitsOptions, string, {}>>'.

How could I fix this problem?

回答

您可以使用provide/inject或定义一个全局配置属性,它Vue.prototype在 Vue 3中替换:

1. provide/inject(用于组合或选项 API)

提供

import axios from 'axios';

const app = Vue.createApp(App);
app.provide('$axios', axios);  // Providing to all components during app creation

注入

组合API:

const { inject } = Vue;
...
setup() {
  const $axios = inject('$axios');   // injecting in a component that wants it
  // $axios.get(...)
}

选项 API:

inject: ['$axios'],   // injecting in a component that wants it

2.全局配置(用于选项 API)

import axios from 'axios';

const app = Vue.createApp(App);
app.config.globalProperties.$axios = axios;

选项 API:

this.$axios

注意:这仅适用于选项 API。埃文你(Vue公司的创建者)说:“config.globalProperties是指作为一个逃生舱口的复制行为Vue.prototype在。setup功能,只需输入你需要什么,或者明确地使用provide/inject将属性暴露给应用程序。


以上是如何在Vue3中使用Vue.prototype或全局变量?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>