Пользовательский роутинг
Добавление пользовательских маршрутов
В Nuxt 3 маршрутизация определяется структурой файлов в директории pages. Однако, поскольку Nuxt использует vue-router под капотом, он предлагает вам несколько способов добавить пользовательские маршруты в ваш проект.
Конфигурация маршрутизатора
Используя параметры маршрутизатора, вы можете дополнительно переопределить или расширить ваши маршруты с помощью функции, которая принимает отсканированные маршруты и возвращает настроенные маршруты.
Если она возвращает null или undefined, Nuxt вернется к маршрутам по умолчанию (полезно для изменения входного массива).
import type { RouterConfig } from '@nuxt/schema'
export default {
  // https://router.vuejs.org/api/interfaces/routeroptions.html#routes
  routes: (_routes) => [
    {
      name: 'home',
      path: '/',
      component: () => import('~/pages/home.vue')
    }
  ],
} satisfies RouterConfig
routes, метаданными, определенными в definePageMeta предоставленного вами компонента. Если вы хотите этого, вам следует использовать хук pages:extend, который вызывается во время сборки.Хук страниц
Вы можете добавлять, изменять или удалять страницы из отсканированных маршрутов с помощью Nuxt-хука pages:extend.
Например, чтобы предотвратить создание маршрутов для любых файлов .ts:
import type { NuxtPage } from '@nuxt/schema'
export default defineNuxtConfig({
  hooks: {
    'pages:extend' (pages) {
      // добавляем маршрут
      pages.push({
        name: 'profile',
        path: '/profile',
        file: '~/extra-pages/profile.vue'
      })
      // удаляем маршруты
      function removePagesMatching (pattern: RegExp, pages: NuxtPage[] = []) {
        const pagesToRemove: NuxtPage[] = []
        for (const page of pages) {
          if (page.file && pattern.test(page.file)) {
            pagesToRemove.push(page)
          } else {
            removePagesMatching(pattern, page.children)
          }
        }
        for (const page of pagesToRemove) {
          pages.splice(pages.indexOf(page), 1)
        }
      }
      removePagesMatching(/\.ts$/, pages)
    }
  }
})
Nuxt-модуль
Если вы планируете добавить целый набор страниц, связанных с определенной функциональностью, вам может понадобиться Nuxt-модуль.
Nuxt kit предоставляет несколько способов добавления маршрутов:
- extendPages(callback: pages => void)
- extendRouteRules(route: string, rule: NitroRouteConfig, options: ExtendRouteRulesOptions)
Опции маршрутизатора
Помимо настройки опций для vue-router, Nuxt предлагает дополнительные опции для настройки маршрутизатора.
Использование app/router.options
Это рекомендуемый способ задания опций маршрутизатора.
import type { RouterConfig } from '@nuxt/schema'
export default {
} satisfies RouterConfig
Можно добавить больше файлов опций маршрутизатора, добавив файлы в хуке pages:routerOptions. Более поздние элементы массива переопределяют более ранние.
optional, в этом случае она будет применяться только тогда, когда постраничная навигация уже включена.import { createResolver } from '@nuxt/kit'
export default defineNuxtConfig({
  hooks: {
    'pages:routerOptions' ({ files }) {
      const resolver = createResolver(import.meta.url)
      // добавляем маршрут
      files.push({
        path: resolver.resolve('./runtime/app/router-options'),
        optional: true
      })
    }
  }
})
Использование nuxt.config
Примечание: Настраиваются только JSON-сериализуемые опции:
- linkActiveClass
- linkExactActiveClass
- end
- sensitive
- strict
- hashMode
- scrollBehaviorType
export default defineNuxtConfig({
  router: {
    options: {}
  }
})
Режим хэширования (SPA)
Вы можете включить хэш-историю в SPA-режиме с помощью hashMode конфига. В этом режиме маршрутизатор использует символ хэша (#) перед фактическим URL-адресом, который передается внутрь. Если этот режим включен, URL никогда не отправляется на сервер и SSR не поддерживается.
export default defineNuxtConfig({
  ssr: false,
  router: {
    options: {
      hashMode: true
    }
  }
})
Поведение скролла для хэш-ссылок
Вы можете опционально настроить поведение скролла для хэш-ссылок. Если установить для конфига значение smooth и загрузить страницу с хэш-ссылкой (например, https://example.com/blog/my-article#comments), вы увидите, что браузер плавно скроллится до этого якоря.
export default defineNuxtConfig({
  router: {
    options: {
      scrollBehaviorType: 'smooth'
    }
  }
})
Пользовательская история (продвинутый уровень)
Вы можете опционально переопределить history-режим с помощью функции, которая принимает базовый URL-адрес и возвращает history-режим. Если функция возвращает null или undefined, Nuxt вернется к истории по умолчанию.
import type { RouterConfig } from '@nuxt/schema'
import { createMemoryHistory } from 'vue-router'
export default {
  // https://router.vuejs.org/api/interfaces/routeroptions.html
  history: base => import.meta.client ? createMemoryHistory(base) : null /* по умолчанию */
} satisfies RouterConfig