R.Q*_*R.Q 16 javascript vue.js axios vuejs3
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
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)
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, {}>>'.
Run Code Online (Sandbox Code Playgroud)
How could I fix this problem?
Dan*_*Dan 43
您可以使用provide
/inject
或定义一个全局配置属性,它Vue.prototype
在 Vue 3中替换:
provide
/inject
(用于组合或选项 API)提供
import axios from 'axios';
const app = Vue.createApp(App);
app.provide('$axios', axios); // Providing to all components during app creation
Run Code Online (Sandbox Code Playgroud)
注入
组合API:
const { inject } = Vue;
...
setup() {
const $axios = inject('$axios'); // injecting in a component that wants it
// $axios.get(...)
}
Run Code Online (Sandbox Code Playgroud)
选项 API:
inject: ['$axios'], // injecting in a component that wants it
Run Code Online (Sandbox Code Playgroud)
import axios from 'axios';
const app = Vue.createApp(App);
app.config.globalProperties.$axios = axios;
Run Code Online (Sandbox Code Playgroud)
选项 API:
this.$axios
Run Code Online (Sandbox Code Playgroud)
注意:这仅适用于选项 API。埃文你(Vue公司的创建者)说:“config.globalProperties
是指作为一个逃生舱口的复制行为Vue.prototype
在。setup
功能,只需输入你需要什么,或者明确地使用provide
/inject
将属性暴露给应用程序。 ”
Mar*_*tin 12
有一种globalProperties
在设置函数内部使用的方法。尽管这可能被认为是一种反模式。如果可能的话,最好使用提供/注入。但是,如果有一个使用 globalProperties 的库,并且您确实需要从设置中访问它,那么您可以这样做。
<script setup>
import { getCurrentInstance } from 'vue'
const app = getCurrentInstance()
const progressBar = app.appContext.config.globalProperties.$Progress
progressBar.start()
</script>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11207 次 |
最近记录: |