如何在Nuxt.js的嵌套路由中创建可选参数?

时间:2019-03-02 12:00:47

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

在nuxt.js应用程序中,我有这样的嵌套路由: route-1/route-2/route-3

我想在route-1之后添加一个可选参数,以呈现相同的旧路线,但带有额外的信息(项目ID或类似名称),这意味着它将映射到2种路线格式

route-1/:param/route-2/route-3route-1/route-2/route-3

没有重复的文件夹结构

如果我添加一个带有参数名称的文件,它将是必需的参数,并且我不得不在没有此参数的情况下复制文件夹结构来处理这两种情况

1 个答案:

答案 0 :(得分:1)

就我而言,这解决了。我有此页面树:

pages/
--| search/
----| index.vue
--| index.vue

我在搜索页面中需要一个可选的“类别”参数。我将延伸这样的路线:

// nuxt.config.js

export default {
  router: {
    middleware: [...],
    extendRoutes (routes, resolve) {
      routes.push({
        name: 'search-category',
        path: '/search/:category',
        component: resolve(__dirname, 'pages/search/index.vue'),
        chunkName: 'pages/search/_category/index'
      })
    }
  }
}

如果我导航到/search/search/my-category,则在两种情况下都呈现相同的页面,在第二种情况下,我在my-category中具有值$route.params.category:)< / p>

在您的情况下,可能类似于:

// nuxt.config.js

export default {
  router: {
    middleware: [...],
    extendRoutes (routes, resolve) {
      routes.push({
        name: 'my-new-route',
        path: '/route-1/:param/route-2/route-3',
        component: resolve(__dirname, 'pages/same-route/index.vue'),
        chunkName: 'pages/same-route/_param/index'
      })
    }
  }
}

顺便说一句:如果您使用chunkName插件,则nuxtI18n是必需的,在此插件中,动态路由的配置为(以我为例):

// nuxt.config.js

export default {
  i18n: {
    pages: {
      'search/index': { // <-- route in pages tree
        es: '/buscar',
        en: '/search'
      },
      'search/_category/index': { // <-- dynamic route configured
        es: '/buscar/:category',
        en: '/search/:category'
      }
    }
  }
}