vue3+ts在语法糖setup使用全局变量

790 阅读1分钟

背景:vue3和ts注册全局变量,使用的过程会有点麻烦,ts需要进行类型标注,所以记录一下

vue3注册全局变量


import service from '@/utils/request.js';// 封装好的axios
import App from './App.vue'
const app = createApp(App);
app.use(store).use(router).mount('#app')
app.config.globalProperties.$axios = service;

语法糖setup使用全局变量

方式一直接使用,在ts中会报红

image.png

方式二: 看上去代码很冗余

import { getCurrentInstance, ComponentInternalInstance } from 'vue';
const {
  appContext: {
    config: {
      globalProperties: { $axios }
    }
  }
} = getCurrentInstance() as ComponentInternalInstance;

方式三:升级为hooks,多处使用/src/hooks/useCurrentInstance.ts

import { ComponentInternalInstance, getCurrentInstance } from 'vue'
export default function useCurrentInstance() {
    const { appContext } = getCurrentInstance() as ComponentInternalInstance
    const globalProperties = appContext.config.globalProperties
    return {
        ...globalProperties
    }
}

组件内使用

import useCurrentInstance from '@/hooks/useCurrentInstance';
const { $axios, $router } = useCurrentInstance();