【问题标题】:How to call a custom global function using composition api | vue3如何使用组合 api 调用自定义全局函数 | Vue3
【发布时间】:2021-10-21 05:26:52
【问题描述】:

在 main.js 中,我将 axios 设置为全局函数。


//main.js
import { createApp } from 'vue';
import App from './App.vue';
import axios from 'axios';
const app = createApp(App);
app.config.globalProperties.$http = axios;
app.mount('#app');

问题是如何使用组合 API 在组件中调用此函数?


<script>
export default {
  setup() {
   //how do I call the `axios` global function?
 };
</script>

【问题讨论】:

  • 你应该可以通过$http使用它,但是为什么不将它导入到组件中呢?
  • 检查here

标签: vue.js axios vue-component vuejs3 composition


【解决方案1】:

首先,是不是可以简单地在需要的组件中导入axios?在 Vue 3 中不鼓励使用组合 API 使用全局属性。话虽如此,这仍然可以通过以下几种方式实现:

在需要的地方导入

正如我之前提到的,理想的方法是简单地

import axios from 'axios'

在需要的组件中。

提供/注入

如果出于某种原因,您确实需要从您的 app 全局提供 Axios,另一种方法是使用 Provide/Inject 模式。

在你的App.vue

import { provide } from 'vue'

export default {
    setup() {
        provide('axios', axios);
    }
}

在任何需要它的组件中:

import { inject } from 'vue'

export default {
    setup() {
        const axios = inject('axios');
    }
}

getCurrentInstance()(不鼓励)

the Vue documentation

强烈建议不要在应用程序代码中使用getCurrentInstance。不要将其用作逃生舱口以在 Composition API 中获得等效项。

但是,如果您真的想将其作为全局属性进行维护,则可以按如下方式使用它:

import { getCurrentInstance } from 'vue';

export default {
    setup() {
        const app = getCurrentInstance();
        const axios = app.appContext.config.globalProperties.$http;

【讨论】:

    【解决方案2】:

    你可以这样称呼它:

    this.$http.get('http://127.0.0.1/api')
    

    【讨论】:

    • this 在设置函数中未定义
    猜你喜欢
    • 2021-11-05
    • 2021-12-18
    • 1970-01-01
    • 2015-05-07
    • 2021-02-23
    • 2022-12-22
    • 1970-01-01
    • 2018-11-02
    • 2021-12-05
    相关资源
    最近更新 更多