【问题标题】:How can I load JSON config file and let the Vue app wait for this?如何加载 JSON 配置文件并让 Vue 应用程序等待这个?
【发布时间】:2019-05-15 13:59:08
【问题描述】:

对我来说一个典型的场景是:

  • 一个 Vue 应用程序(使用 webpack 打包,顺便说一句)
  • 用于配置应用程序的单独配置文件

配置文件不应包含在 webpacked 部署包中,因为它依赖于服务器(数据库凭据等)

出于某种原因,我不打算在这里详细说明,我将配置保存在 JSON 文件中。

所以问题是:

如何延迟“启动”Vue 应用,直到 JSON 配置文件从后端加载(并解析)?

我知道如何加载和解析,但对我来说问题是特定于 Vue 的:在开始整个事情之前“等待”某事的最佳做法是什么?

(像App.vue 组件中的beforeCreate 生命周期钩子是要走的路吗?它是否可以很好地处理异步任务,例如通过网络加载 JSON 文件?)

【问题讨论】:

  • 如果您的应用程序的编写方式无法与异步加载的数据一起工作,那么您根本无法调用 new Vue({ ... 直到您加载了数据。跨度>
  • 如果您确实想延迟启动应用程序。像@Zaptree 所说的那样可能是最好的。您可以在 promise 中加载 JSON 配置(axios 调用或本地读取文件)并在 .then 中启动 Vue 应用程序。

标签: vue.js config wait startup


【解决方案1】:

我用来解决此类问题的一种方法是使用 router.beforeEach。这是我的代码示例:

router.beforeEach(async (to, from, next) => {
  if (!store.state.initialized) {
    // the store initialize will set initialized to true
    await store.dispatch('initialize')
  }
  // if user not logged in or the route is not public
  if (!store.state.user && !to.meta.public) {
    next('/login')
  } else {
    next();
  }
});

【讨论】:

  • 感谢您的 2 个解决方案!我会接受另一个答案“在承诺的.then 中启动 Vue,这将预加载 JSON 配置文件。由于我不能接受评论,所以我接受了这个答案——这也是解决这个问题的好方法。哪种解决方案是正确的取决于使用 - 正如你和 Shawn 指出的那样 - 在我的配置中,应用程序无法执行其任务,所以我阻止了整个应用程序,而不是使用 router.beforeEach 拦截每条路线。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 2020-03-08
  • 2017-11-02
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 2022-10-21
相关资源
最近更新 更多