背景: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中会报红
方式二: 看上去代码很冗余
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();