【问题标题】:Dynamically choose compontent in Nuxt Router在 Nuxt Router 中动态选择组件
【发布时间】:2020-04-11 01:14:53
【问题描述】:

我想为所有语言呈现相同的组件。翻译将在组件内部完成。 url 和组件的关系应该是这样的:

pseudocode:
browserurl: "/blogpost_1"
nuxtcomponent: "blogpost_1"

browserurl: "/en/blogpost_1"
nuxtcomponent: "blogpost_1"

browserurl: "/randompage"
nuxtcomponent: "randompage"

browserurl: "/en/randompage"
nuxtcomponent: "randompage"

我的方法是执行以下操作,不幸的是我找不到访问 pathMatch 的方法。

router: {
   extendRoutes(routes, resolve){
   routes.push({
     path: 'en/*',
     component: resolve(__dirname, '/' + somehow.access.pathMatch )
})
}

}

【问题讨论】:

  • this.$route.params.pathMatch ?

标签: vue.js vue-router nuxt.js


【解决方案1】:

我认为您不能动态解析组件。 component: 需要组件实例或 Promise。一旦 promise 解决,结果就会被缓存。我可以想象使用导航防护和“手动”切换组件的解决方案,但这需要手动导入视图等。

所以最好的办法是重写 nuxt 生成的路径以包含可选路径段(从 /about/:lang(en|jp)?/about,因此它接受像 /en/about 这样的路径) - 然后你的组件接收 lang 参数,该参数将为空对于/about,否则它将包含语言....

  1. meta 中定义可用的翻译
  2. 用翻译重写页面路径

在您的页面中:

<script>
export default {
  meta: {
    translations: ['en', 'jp']
  }
}
</script>

在 Nuxt 配置中(伪 - 未测试)

router: {
    extendRoutes(routes, resolve) {
        const routesWithTranslation = routes.filter(i => i.meta.translations && i.meta.translations.length > 0);

        routesWithTranslation.forEach(route => {
            const segment = `/:lang(${route.meta.translations.join("|")})?`
            route.path = segment + route.path           
        })
}

【讨论】:

  • 不错的 hack,但我更喜欢使用正则表达式的方法,而不是为每种语言推送数百条路由。
  • 我做得更好;)
  • 我刚开始研究正则表达式引擎的路径!我认为这是定义所有路线的最简洁的方式!干得好
  • 理想情况下我会喜欢这样的东西:try and catch,能够定义后备。例如,英国的美国后备,CH 的 AT 后备的 DE 后备。等等,但我想这就是它的完成方式。没有理由过于复杂。此功能非常灵活且可扩展。在元属性上+1。
  • 嗯,这是您可以在页面内处理lang 参数的代码中执行的操作。不应该是路由器问题恕我直言...
猜你喜欢
  • 2020-07-04
  • 2019-08-10
  • 2018-06-12
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 2018-01-31
相关资源
最近更新 更多