typescript - 如何在 Vue 3 组合 api 中创建 axios 插件

标签 typescript axios vuejs3 vue-composition-api

我正在使用 Vue 3 组合 api 和 typescript 。

我想制作 Axios 插件在我的项目中使用。

这是我的代码

plugins/axios.js

import axios from 'axios'
const axiosInstance = axios.create({
    baseURL: import.meta.env.VITE_API_URL,
})
export default {
    install: (app, options) => {
        app.config.globalProperties.$axios={ ...axiosInstance }
    }
}

ma​​in.ts

import { createApp } from 'vue'

import axiosPlugin from '@/plugins/axios.js'


import App from './App.vue'

const app = createApp(App)

app.use(axiosPlugin, {})

app.mount('#app')

我的组件

<script setup lang="ts">
import { $axios } from 'vue'

但是我在最后一个代码部分有错误

模块“vue”没有导出成员“$axios”.ts(2305)

enter image description here

声明 axios 插件时可能有问题

有什么问题吗?

最佳答案

您的 axios 插件未在 Vue 库中公开,因此导入不起作用。您的插件已连接到 Vue 实例。在 Vue 2(或选项 API)中,您可以使用 this 关键字,但在设置方法中您需要使用 getCurrentInstance。试试这个

<script setup lang='ts'>
    import { getCurrentInstance } from 'vue'

    const app = getCurrentInstance()
    const axios = app.appContext.config.globalProperties.$axios
</script>

或者,您可以使用提供/注入(inject)方法。
在你的 main.ts 中

app.provide('axios', axiosInstance);

在你的组件中

import { inject } from 'vue';
const axios = inject('axios');

关于typescript - 如何在 Vue 3 组合 api 中创建 axios 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73237225/

相关文章:

css - 为什么折叠动画在 vue3 中不起作用?

typescript - 在 Typescript 中键入对类构造函数的引用?

javascript - 努克斯 : how do I access axios within the fetch() method?

javascript - Axios Vue.js 将一组对象从 store.js 传递到组件

vue.js - 如何在不注入(inject)的情况下创建全局组件?

javascript - 在组件外部使用 pinia 不会引发事件 pinia 错误

javascript - Angular 2/4/Universal - 如何使用 JSON-LD 数据?

java 休息调用获取 url net::ERR_FAILED

typescript - 为什么这个 typescript 输出 "[Class] is not a constructor."?

javascript - 使用 React 和 axios 进行 curl