nuxt.js - Nuxt context.route 未在 asyncData() 中更新
问题描述
我正在使用asyncData
slug 来获取页面的当前数据,以在我的 API (Strapi) 中查找数据。这适用于新页面加载,但在导航到另一种语言 (nuxt-i18n) 时会失败。当导航到另一种语言时,调用了 asyncData 但由于某种原因尚未更新路由,因此 slug 匹配失败。手动刷新页面会更新路由,然后 slug 匹配。
// pages/_slug/index.vue
<script>
export default {
async asyncData({ params, route, $strapi, error, app, store, i18n }) {
const path = route.params.slug // <- This is not updated on page navigation using language switcher
const page = await $strapi.$pages.find({ slug: path, _locale: i18n.locale })
if (page.length === 0) {
error({ statusCode: 404, message: 'Page not found' })
return {}
}
// Get the slug for this page in every locale.
const localizedSlugs = {}
for (const code of i18n.localeCodes) {
localizedSlugs[code] = {
slug: route.params.slug,
}
}
for (const lang of page[0].localizations) {
const pageLocalized = await $strapi.$pages.find({ id: lang.id, _locale: lang.locale })
if (pageLocalized.length > 0) {
localizedSlugs[lang.locale].slug = pageLocalized[0].slug
}
}
await store.dispatch('i18n/setRouteParams', localizedSlugs)
return { page: page[0] }
}
}
</script>
我正在使用的语言切换器如下所示:
<template>
<div class="language-switcher">
<nuxt-link
v-for="locale in availableLocales"
:key="locale.code"
:to="switchLocalePath(locale.code)">
{{ locale.code }}
</nuxt-link>
</div>
</template>
<script>
export default {
computed: {
availableLocales() {
return this.$i18n.locales
},
},
}
</script>
知道为什么route.params.slug
(或通常的路线)在客户端导航到不同语言后没有更新吗?
编辑:我目前的解决方法是不使用NuxtLink
组件,而是使用普通的锚标签,如下所示:
<a
v-for="locale in availableLocales"
:key="locale.code"
:href="switchLocalePath(locale.code)">
{{ locale.code }}
</a>
这会重新加载页面并正确加载asyncData
依赖于将页面与 API 匹配的路由参数。
解决方案
更新:问题已修复vue-i18n@8.24.5
原始答案
你用的是什么版本的 nuxt-i18n 和 vue-i18n?
我遇到了与 nuxt 相同的问题validate()
:从 nuxt 上下文获取路由并将其与 vuex 存储中的 API 数据匹配失败,因为路由未更新。
对我来说,它可以降级vue-i18n@8.24.2
或更低。看起来这是从 8.24.3 开始的问题。
我在这里提出了一个问题https://github.com/kazupon/vue-i18n/issues/1230但我不确定它是由 vue-i18n 还是 nuxt-i18n 修复的。
推荐阅读
- php - 如何在获取时从获取mysql中乘以值
- asp.net - 页面索引在第二页以后不起作用
- mysql - 将手动分配的 ID 重置为自动递增
- c# - Webdriver Driver Mananger 2.7.0 没有从 Nuget 与 .Net 框架 4.5 安装
- laravel - Laravel 5.8 创建递归集合
- haskell - Haskell 中的布尔非穷举模式
- alexa - 在 Alexa 中更改 SessionEndedRequest 处理程序响应
- node.js - 如何从调用的 API 获取集合名称
- msbuild - 如何在 msbuild 中使用项目元数据作为项目函数的参数?
- python - 使用 BeautifulSoup 和 Python 抓取特定的“dd”标签