javascript - 在 vue js 客户端中存储 api 配置的正确方法
问题描述
我有一个与 api 通信的 Vue.js SPA。这个 api 有一个端点来获取关于它的一般设置。我在我的 SPA 中需要这些,但不想每次需要它们时都提出请求。
这些在某种程度上是固定的,但可以更改 - 我在构建应用程序时不知道它们,所以我不能在我的 SPA 中静态编译它们。
- 我试过创建一个像这样的简单模块:
import {HTTP} from './http-common'
export default {
config: null,
getConfig() {
return this.config
},
initConfig() {
return HTTP.get('info')
.then(r => {
this.config = r.data
})
}
}
main.js
然后,在创建 vue 实例之前,我在我的文件中执行了此操作:
import config from './config'
config.initConfig()
.then(() => {
Vue.prototype.$config = config.getConfig()
})
问题是我没有一个很好的方法来了解我的组件是否已初始化配置,或者请求是否仍处于挂起状态或已成功加载。我可以检查一下this.$config === null
,如果是的话,我需要把整个东西放在一个setTimeout
左右,感觉有点hacky。
我还想在我需要的任何地方从上面包含我的配置模块,并在
config.getConfig()
每次需要该值时调用。Vuex 也可能是一个解决方案,但我的 SPA 非常简单(至少目前如此),我宁愿在不需要时避免 Vuex 的额外复杂性。
解决方案
我建议不要直接在 main.js 文件中执行此操作,而是在根组件中执行此操作。出于争论的原因,我们将其称为 App.vue
<template>
<div
v-if="appReady"
id="app"
>
// Other template stuff here
</div>
<script>
import {HTTP} from './http-common'
export default {
name: 'App',
data () {
return {
config: null
}
},
computed: {
appReady () {
return !!this.config
}
},
beforeCreate () {
HTTP.get('info')
.then(r => {
this.config = r.data
})
}
}
</script>
然后只需this.$root.config
在使用JS时调用或在模板中调用即可访问其他组件中的配置$root.config
推荐阅读
- android-studio - Flutter:无法加载资产
- rest - 是否有在 RESTful API 中定义“模板”资源的模式?
- sparql - SPARQL 我们什么时候使用“a”
- python - SQLAlchemy ORM 中有没有办法映射垂直存储列表的单个表?
- server - Apache proxypass 重定向到多个 unix 套接字
- asp.net - asp.net/vb 网页未重定向
- getstream-io - Stream Chat 默认返回所有频道
- c# - 如何在访问原始请求正文的同时为 Web API 帮助页面生成正文参数/示例请求
- c++ - C++ 类中静态函数的意外结果
- json - 如何从api中提取多页数据