如何访问 asyncData 中的模板?

How to get access to template in asyncData?

我想在 asyncData 中访问 this.$el。 我使用数据库来存储翻译。 我想获取当前页面上使用的翻译列表。 然后我会向服务器发送一个请求来接收它们。 之后,我会合并它。

i18.mergeLocaleMessage( locale, message )

怎么做?

您可以使用类似的方式访问 i18n,无需访问此用例的模板

asyncData ({ app }) {
  console.log(app.i18n.t('Hello'))
}

查看 lifecycle of NuxtasyncData 会在生成任何模板之前发生,因此 asyncData 是不可能的。
即使有一些 hacky 技巧是可能的,但必须查看模板内部然后有一些逻辑来获取 i18n 会有点奇怪。

为什么不获取 computed 嵌套对象并在获取所有需要的翻译后通过模板循环?

此外,您每次都使用 asyncData + API 调用吗?因此,对于每个页面:您将阻止用户,让他等待 API 调用然后继续 ?

最新一点,如果你在你的页面上点击 F5,那么 asyncData 钩子将不会被触发。只是想让你知道这个警告。

替代解决方案:

  • 使用 fetch() 挂钩并显示加载程序,直到您获取所有翻译,最好不要依赖模板的内容。这甚至可以在 F5 上工作,并且可以产生更流畅的体验(通过不阻止导航)。
  • 在您的用户连接空闲时的某个时刻,在全球范围内获取您的 i18n 完整翻译。而不是在每页上。特别是因为您需要处理不获取您已有的某些翻译的逻辑(如果用户访问一个页面两次)。