背景
考虑以下:
// app.js
import API from 'utils/API';
const api = new API(config.app.urls.api, endpoints, token);
app.provide('$api', api);
根据我在过去 24 小时内阅读的所有内容,以上是向 Vue.js 3 提供“服务”的建议方法。
但是,上述问题是我现在无法访问 API 实例inject https://v3.vuejs.org/api/composition-api.html#provide-inject方法不能在 Vue 组件之外使用。
因此,当我想将 API 实例导入到我的 Vuex 模块中时,我不能...
Question
是否有一种“建议”的方式来访问 Vue 组件之外提供的服务?或者我提出的解决方案之一如下should做完了?
可能的解决方案
建议的解决方案 1
我们可以将其添加到全局属性中,而不是向 Vue 提供服务,如下所示:
// app.js
app.config.globalProperties.$api = api;
然后我们可以像在商店中一样访问它:
// some-vuex-module.js
import { getCurrentInstance } from 'vue';
const api = getCurrentInstance().appContext.config.globalProperties.$api;
我在我的应用程序中使用上述内容来处理某些事情,但对于 API 服务,这样做似乎是错误的。
建议的解决方案 2
我想到的另一个解决方案是让 API 实例可用于窗口,如下所示:
// app.js
import API from 'utils/API';
const api = window.api = new API(config.app.urls.api, endpoints, token);
app.provide('$api', api);
上面的内容似乎是一种反模式......