main.js中设置的app.config.globalProperties.$http,为什么在vue文件中通过this.$http获取不到
时间: 2024-04-10 21:27:28 浏览: 240
vue.js this.$router.push获取不到params参数问题
5星 · 资源好评率100%
在 Vue 3 中,使用 `app.config.globalProperties` 添加的全局属性,在组件中通过 `this` 访问时是不可用的。这是因为在 Vue 3 中,组件实例的上下文发生了变化。
要在组件中使用全局属性,你可以使用 Vue 3 提供的 `provide` 和 `inject` 机制。下面是一个示例:
```javascript
import { createApp, inject } from 'vue';
import App from './App.vue';
import axios from 'axios';
// 设置全局属性
const app = createApp(App);
app.provide('$http', axios);
app.mount('#app');
```
在上述代码中,我们使用 `app.provide` 将 `axios` 实例注入到应用程序中,并将其作为 `$http` 提供给所有组件。
然后,在组件中使用 `inject` 函数来访问全局属性。例如:
```vue
<template>
<div>
<button @click="getData">获取数据</button>
<p>{{ data }}</p>
</div>
</template>
<script>
import { inject } from 'vue';
export default {
data() {
return {
data: null,
};
},
setup() {
// 使用 inject 函数获取全局属性
const $http = inject('$http');
const getData = async () => {
try {
const response = await $http.get('/data');
this.data = response.data;
} catch (error) {
console.error(error);
}
};
return {
getData,
};
},
};
</script>
```
在上述代码中,我们使用 `inject` 函数获取了 `$http` 全局属性,并将其赋值给 `const $http`。然后,在 `getData` 方法中,我们就可以使用 `$http` 进行网络请求。
通过这种方式,你就可以在 Vue 3 组件中使用全局属性了。
希望能帮到你!如果还有其他问题,请随时提问。
阅读全文