diff --git a/docs/content/3.api/3.utils/define-page-meta.md b/docs/content/3.api/3.utils/define-page-meta.md index f0649cc2b42..a2606195022 100644 --- a/docs/content/3.api/3.utils/define-page-meta.md +++ b/docs/content/3.api/3.utils/define-page-meta.md @@ -1,7 +1,152 @@ # `definePageMeta` -::ReadMore{link="/guide/features/routing"} +`definePageMeta` is a compiler macro that you can use to set metadata for your **page** components located in the `pages/` directory (unless [set otherwise](https://v3.nuxtjs.org/api/configuration/nuxt.config#pages)). This way you can set custom metadata for each static or dynamic route of your Nuxt application. + +```vue [pages/some-page.vue] + +``` + +::ReadMore{link="/guide/directory-structure/pages/#page-metadata"} :: -::NeedContribution +## Type + +```ts +definePageMeta(meta: PageMeta) => void + +interface PageMeta { + pageTransition?: boolean | TransitionProps + layoutTransition?: boolean | TransitionProps + key?: false | string | ((route: RouteLocationNormalizedLoaded) => string) + keepalive?: boolean | KeepAliveProps + layout?: false | LayoutKey | Ref | ComputedRef + middleware?: MiddlewareKey | NavigationGuard | Array + [key: string]: any +} +``` + +## Parameters + +### `meta` + +- **Type**: `PageMeta` + + An object accepting the following page metadata: + + **`pageTransition`** + + - **Type**: `boolean` | [`TransitionProps`](https://vuejs.org/api/built-in-components.html#transition) + + Set name of the transition to apply for current page. You can also set this value to `false` to disable the page transition. + + **`layoutTransition`** + + - **Type**: `boolean` | [`TransitionProps`](https://vuejs.org/api/built-in-components.html#transition) + + Set name of the transition to apply for current layout. You can also set this value to `false` to disable the layout transition. + + **`key`** + + - **Type**: `false` | `string` | `((route: RouteLocationNormalizedLoaded) => string)` + + Set `key` value when you need more control over when the `` component is re-rendered. + + **`keepalive`** + + - **Type**: `boolean` | [`KeepAliveProps`](https://vuejs.org/api/built-in-components.html#keepalive) + + Set to `true` when you want to preserve page state across route changes or use the [`KeepAliveProps`](https://vuejs.org/api/built-in-components.html#keepalive) for a fine-grained control. + + **`layout`** + + - **Type**: `false` | `LayoutKey` | `Ref` | `ComputedRef` + + Set a static or dynamic name of the layout for each route. This can be set to `false` in case the default layout needs to be disabled. + + **`middleware`** + + - **Type**: `MiddlewareKey` | [`NavigationGuard`](https://router.vuejs.org/api/interfaces/NavigationGuard.html#navigationguard) | `Array` + + Define anonymous or named middleware directly within `definePageMeta`. Learn more about [route middleware](/docs/directory-structure/middleware). + + **`[key: string]`** + + - **Type**: `any` + + Apart from the above properties, you can also set **custom** metadata. You may wish to do so in a type-safe way by [augmenting the type of the `meta` object](/guide/directory-structure/pages/#typing-custom-metadata). + +## Examples + +### Basic Usage + +The example below demonstrates: + +- how `key` can be a function that returns a value; +- how `keepalive` property makes sure that the `` component is not cached when switching between multiple components; +- adding `pageType` as a custom property: + +```vue [pages/some-page.vue] + +``` + +### Defining Middleware + +The example below shows how the middleware can be defined using a `function` directly within the `definePageMeta` or set as a `string` that matches the middleware file name located in the `middleware/` directory: + +```vue [pages/some-page.vue] + +``` + +### Defining Layout + +You can define the layout that matches the layout's file name located (by default) in the `layouts/` directory. You can also disable the layout by setting the `layout` to `false`: + +```vue [pages/some-page.vue] + +``` + +::ReadMore{link="/guide/features/routing"} ::