首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >asyncData()中的Nuxt context.route未更新

asyncData()中的Nuxt context.route未更新
EN

Stack Overflow用户
提问于 2021-04-24 15:16:01
回答 1查看 600关注 0票数 0

我使用asyncData来获取页面的当前数据,使用slug来查找我的应用程序接口(Strapi)中的数据。这对于新加载的页面很有效,但在导航到另一种语言(nuxt-i18n)时会失败。当导航到另一种语言时,将调用asyncData,但是由于某些原因,路由没有更新,因此段塞匹配失败。手动刷新页面会更新路由,然后插件会进行匹配。

代码语言:javascript
运行
复制
// 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>

我使用的语言切换器如下所示:

代码语言:javascript
运行
复制
<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组件,而是使用普通的锚标签,如下所示:

代码语言:javascript
运行
复制
    <a
      v-for="locale in availableLocales"
      :key="locale.code"
      :href="switchLocalePath(locale.code)">
      {{ locale.code }}
    </a>

这将重新加载页面并正确加载asyncData所依赖的路由参数,以便将页面与应用程序编程接口进行匹配。

EN

回答 1

Stack Overflow用户

发布于 2021-05-25 23:40:43

更新:该问题已在vue-i18n@8.24.5上修复

原始答案

您使用的nuxt-i18n和vue-i18n是什么版本?

我在nuxt中遇到了同样的问题:从nuxt上下文获取路由并将其与vuex存储中的validate()数据进行匹配失败,因为路由没有更新。

对我来说,降级到vue-i18n@8.24.2或更低的版本是可行的。看起来这是从8.24.3开始的一个问题。

我在这里提出了一个问题,但我不确定它是由vue-i18n还是https://github.com/kazupon/vue-i18n/issues/1230 -I18N解决的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67240236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档