definePageMeta
definePageMeta - это макрос компилятора, который вы можете использовать для установки метаданных для ваших компонентов page, расположенных в директории pages/ (если не указано иное). Таким образом, вы можете настроить пользовательские метаданные для каждого статического или динамического маршрута вашего приложения Nuxt.
<script setup lang="ts">
definePageMeta({
layout: 'default'
})
</script>
Тип
definePageMeta(meta: PageMeta) => void
interface PageMeta {
validate?: (route: RouteLocationNormalized) => boolean | Promise<boolean> | Partial<NuxtError> | Promise<Partial<NuxtError>>
redirect?: RouteRecordRedirectOption
name?: string
path?: string
props?: RouteRecordRaw['props']
alias?: string | string[]
pageTransition?: boolean | TransitionProps
layoutTransition?: boolean | TransitionProps
viewTransition?: boolean | 'always'
key?: false | string | ((route: RouteLocationNormalizedLoaded) => string)
keepalive?: boolean | KeepAliveProps
layout?: false | LayoutKey | Ref<LayoutKey> | ComputedRef<LayoutKey>
middleware?: MiddlewareKey | NavigationGuard | Array<MiddlewareKey | NavigationGuard>
scrollToTop?: boolean | ((to: RouteLocationNormalizedLoaded, from: RouteLocationNormalizedLoaded) => boolean)
[key: string]: unknown
}
Параметры
meta
- тип:
PageMeta
Объект, принимающий следующие метаданные страницы:name- тип:
string
Вы можете задать имя для маршрута этой страницы. По умолчанию имя генерируется на основе пути внутри директорииpages/.
path- тип:
string
Вы можете определить пользовательское регулярное выражение, если у вас более сложный шаблон, чем имя файла.
props- Type:
RouteRecordRaw['props']
Allows accessing the routeparamsas props passed to the page component.
alias- тип:
string | string[]
Псевдонимы для записи. Позволяет определять дополнительные пути, которые будут вести себя как копия записи. Позволяет использовать сокращенные пути, такие как/users/:idи/u/:id. Все значенияaliasиpathдолжны иметь одинаковые параметры.
keepalive- тип:
boolean|KeepAliveProps
Установите значениеtrue, если вы хотите сохранить состояние страницы при изменении маршрута, или используйтеKeepAlivePropsдля более тонкого контроля.
key- тип:
false|string|((route: RouteLocationNormalizedLoaded) => string)
Установите значениеkey, если вам нужно больше контроля над тем, когда компонент<NuxtPage>будет перерисовываться.
layout- тип:
false|LayoutKey|Ref<LayoutKey>|ComputedRef<LayoutKey>
Задайте статическое или динамическое имя лейаута для каждого маршрута. Это значение может быть установлено вfalseв случае, если макет по умолчанию должен быть отключен.
layoutTransition- тип:
boolean|TransitionProps
Задайте имя перехода, который будет применяться для текущего лейаута. Вы также можете установить это значение вfalse, чтобы отключить transition лейаута.
middleware- тип:
MiddlewareKey|NavigationGuard|Array<MiddlewareKey | NavigationGuard>
Определение анонимного или именованного middleware непосредственно в definePageMeta. Узнайте больше о middleware маршрутизации.
pageTransition- тип:
boolean|TransitionProps
Установите имя перехода, которое будет применено для текущей страницы. Вы также можете установить это значение равнымfalse, чтобы отключить переход страницы.
viewTransition- тип:
boolean | 'always'
Экспериментальная функция, доступна только в том случае, если включена в вашем файле nuxt.config
Включить/выключить View Transitions для текущей страницы. Если установлено значениеtrue, Nuxt не будет применять переход, если браузер пользователя соответствует параметруprefers-reduced-motion: reduce(рекомендуется). Если установлено значениеalways, Nuxt всегда будет применять переход.
redirect- тип:
RouteRecordRedirectOption
Куда перенаправить, если маршрут соответствует напрямую. Перенаправление происходит до любого навигационного защитника и вызывает новую навигацию с новым целевым расположением.
validate- тип:
(route: RouteLocationNormalized) => boolean | Promise<boolean> | Partial<NuxtError> | Promise<Partial<NuxtError>>
Проверьте, может ли данный маршрут быть правильно отображен с этой страницей. Вернитеtrue, если он действителен, илиfalse, если нет. Если другого соответствия не будет найдено, это будет означать 404. Вы также можете непосредственно вернуть объект соstatusCode/statusMessage, чтобы немедленно ответить с ошибкой (другие соответствия не будут проверяться).
scrollToTop- тип:
boolean | (to: RouteLocationNormalized, from: RouteLocationNormalized) => boolean
Укажите Nuxt, следует ли прокрутить страницу вверх перед ее отображением или нет. Если вы хотите переопределить стандартное поведение прокрутки Nuxt, вы можете сделать это в~/app/router.options.ts(см. настраиваемая маршрутизация для получения дополнительной информации).
[key: string]- тип:
any
Кроме вышеуказанных свойств, вы также можете задать пользовательские метаданные. Вам может потребоваться сделать это в безопасном для типов способе, расширив тип объекта meta.
- тип:
Примеры
Базовое использование
В примере ниже демонстрируется:
- как
keyможет быть функцией, которая возвращает значение; - как свойство
keepaliveобеспечивает то, что компонент<modal>не кэшируется при переключении между несколькими компонентами; - добавление
pageTypeв качестве пользовательского свойства:
<script setup lang="ts">
definePageMeta({
key: (route) => route.fullPath,
keepalive: {
exclude: ['modal']
},
pageType: 'Checkout'
})
</script>
Определение Middleware
В примере ниже показано, как можно определить middleware непосредственно в definePageMeta с помощью function или установив в виде string, которая соответствует имени файла middleware, расположенного в каталоге middleware/:
<script setup lang="ts">
definePageMeta({
// определить middleware в виде функции
middleware: [
function (to, from) {
const auth = useState('auth')
if (!auth.value.authenticated) {
return navigateTo('/login')
}
if (to.path !== '/checkout') {
return navigateTo('/checkout')
}
}
],
// ... или в виде строки
middleware: 'auth'
// ... или в виде нескольких строк
middleware: ['auth', 'another-named-middleware']
})
</script>
Использование пользовательского регулярного выражения
Пользовательское регулярное выражение является хорошим способом разрешения конфликтов между пересекающимися маршрутами, например:
Два маршрута "/test-category" и "/1234-post" соответствуют как маршрутам страниц [postId]-[postSlug].vue, так и [categorySlug].vue.
Чтобы убедиться, что мы соответствуем только цифрам (\d+) для postId в маршруте [postId]-[postSlug], мы можем добавить следующее в шаблон страницы [postId]-[postSlug].vue:
<script setup lang="ts">
definePageMeta({
path: '/:postId(\\d+)-:postSlug'
})
</script>
Для получения дополнительных примеров см. Синтаксис соответствия Vue Router.
Определение лейаута
Вы можете определить лейаут, который соответствует имени файла лейаута, расположенного (по умолчанию) в директории layouts/. Вы также можете отключить лейаут, установив для него значение false:
<script setup lang="ts">
definePageMeta({
// Установить кастомный лейаут
layout: 'admin'
// ... или выключить лейаут по умолчанию
layout: false
})
</script>