如何在 Nuxt 中用一个组件创建无限路由

Posted

技术标签:

【中文标题】如何在 Nuxt 中用一个组件创建无限路由【英文标题】:How create the infinite route with one component in Nuxt 【发布时间】:2021-10-14 15:29:07 【问题描述】:

我最近收到了一个使用 Nuxt.js 的项目,但遇到了一些问题。 我有一个从 API 获取一些产品并从 Vuex 获取它们的组件。 每个产品可能有一个孩子数组,每个孩子可能有一个孩子数组等等。

import Images from '@/components/products/Images'
import  mapGetters  from 'vuex'

export default 
  components: 
    Images
  ,
  data () 
    return 
      images: [],
      options: 
        width: 300,
        padding: 
          2: 8,
          default: 12
        
      
    
  ,
  computed: 
    ...mapGetters(
      products: 'getProducts'
    )
  ,
  mounted () 
    this.images = this.products.filter(
      item => item.slug === this.$route.params.slug
    )
  
<template>
  <div class="container_pic">
    <div class="flow-root">
      <div
        v-for="(item, index) in images"
        :key="index"
        class="w-full md:p-4 py-4"
      >
        <h6 class="text-lg mt-6 mb-8">
           item.title 
        </h6>
        <Images
          :item="item"
          :slug="true"
          :childs="item.childs"
          large
        />
      </div>
    </div>
  </div>
</template>

产品数据可以是这样的:

products: 
   id: 1, childs: [], title: "title 1" ,
   id: 2, childs: [
     id: 3, childs: [], title: "title 3" ,
     id: 4, childs: [
       id: 5, childs: [
         id: 6, childs: [], title: "title 6" ,
      ], title: "title 5" ,
    ], title: "title 4" ,
  ], title: "title 2" 

我需要的是每次用户点击图像组件时,如果产品有子项并且它的长度大于0,则将子项重定向到当前路由并获取子数组。

【问题讨论】:

【参考方案1】:

不确定我是否理解正确,但您可能有递归路线,对吧? Nuxt 的未知动态嵌套路由可能对 IMO 有所帮助:https://nuxtjs.org/docs/2.x/features/file-system-routing#unknown-dynamic-nested-routes

如果你这样组织你的页面

pages/
--| people/
-----| _id.vue
-----| index.vue
--| _.vue
--| index.vue

你会得到以下路线

/ -> index.vue
/people -> people/index.vue
/people/123 -> people/_id.vue
/about -> _.vue
/about/careers -> _.vue
/about/careers/chicago -> _.vue

【讨论】:

你是对的!但我不知道如何处理它,当我单击每个 Image 组件时,都会为我返回子数据并重新创建页面! @NiazEstefaie 不确定实际代码,但想法是当您单击某些东西时有一些递归?单击时,您可以通过有效负载创建像/image/abc/def/ghi 这样的动态路径,_.vue 组件应该捕获它,然后,您可以查看嵌套结果并手动或使用类似 @ 的方式获取您要查找的数据987654322@ 所以,不要重新创建页面,只要在你到达这里就获取数据。

以上是关于如何在 Nuxt 中用一个组件创建无限路由的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Nuxt 中使路由区分大小写

如何生成带有目标的路由:Nuxt 中的服务器渲染?

如何根据 API 获取的内容创建列表 + 详细信息页面

如何在 Nuxt Vue 的单个模板中添加多个组件?

如何在 nuxt.js 中定义路由

02-nuxt使用二