definePageMeta
Defina metadados para seus componentes de página.
definePageMeta é uma macro de compilador que você pode usar para definir metadados para seus componentes de página localizados no diretório pages/ (a menos que definido de outra forma). Desta forma, você pode definir metadados personalizados para cada rota estática ou dinâmica da sua aplicação Nuxt.
definePageMeta({
layout: 'default'
})Tipo
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
}
Parâmetros
meta
-
Tipo:
PageMetaUm objeto que aceita os seguintes metadados de página:
name-
Tipo:
stringVocê pode definir um nome para a rota desta página. Por padrão, o nome é gerado com base no caminho dentro do diretório
pages/.
path-
Tipo:
stringVocê pode definir uma expressão regular personalizada se tiver um padrão mais complexo do que pode ser expresso com o nome do arquivo.
props-
Tipo:
RouteRecordRaw['props']Permite acessar os
paramsda rota como props passadas para o componente de página.
alias-
Tipo:
string | string[]Aliases para o registro. Permite definir caminhos extras que se comportarão como uma cópia do registro. Permite ter atalhos de caminhos como
/users/:ide/u/:id. Todos os valores dealiasepathdevem compartilhar os mesmos parâmetros.
keepalive-
Tipo:
boolean|KeepAlivePropsDefina como
truequando você quiser preservar o estado da página entre mudanças de rota ou use oKeepAlivePropspara um controle mais detalhado.
key-
Tipo:
false|string|((route: RouteLocationNormalizedLoaded) => string)Defina o valor de
keyquando precisar de mais controle sobre quando o componente<NuxtPage>é re-renderizado.
layout-
Tipo:
false|LayoutKey|Ref<LayoutKey>|ComputedRef<LayoutKey>Defina um nome estático ou dinâmico do layout para cada rota. Isso pode ser definido como
falsecaso o layout padrão precise ser desativado.
layoutTransition-
Tipo:
boolean|TransitionPropsDefina o nome da transição a ser aplicada para o layout atual. Você também pode definir este valor como
falsepara desativar a transição do layout.
middleware-
Tipo:
MiddlewareKey|NavigationGuard|Array<MiddlewareKey | NavigationGuard>Defina middleware anônimo ou nomeado diretamente dentro de
definePageMeta. Saiba mais sobre middleware de rota.
pageTransition-
Tipo:
boolean|TransitionPropsDefina o nome da transição a ser aplicada para a página atual. Você também pode definir este valor como
falsepara desativar a transição da página.
viewTransition-
Tipo:
boolean | 'always'Recurso experimental, disponível apenas quando ativado no seu arquivo nuxt.config
Ative/desative Transições de Visualização para a página atual. Se definido como true, o Nuxt não aplicará a transição se o navegador do usuário corresponder aprefers-reduced-motion: reduce(recomendado). Se definido comoalways, o Nuxt sempre aplicará a transição.
redirect-
Tipo:
RouteRecordRedirectOptionPara onde redirecionar se a rota for diretamente correspondida. O redirecionamento acontece antes de qualquer guarda de navegação e aciona uma nova navegação com o novo local de destino.
validate-
Tipo:
(route: RouteLocationNormalized) => boolean | Promise<boolean> | Partial<NuxtError> | Promise<Partial<NuxtError>>Valide se uma determinada rota pode ser renderizada validamente com esta página. Retorne true se for válido, ou false se não for. Se outra correspondência não puder ser encontrada, isso significará um 404. Você também pode retornar diretamente um objeto com
statusCode/statusMessagepara responder imediatamente com um erro (outras correspondências não serão verificadas).
scrollToTop-
Tipo:
boolean | (to: RouteLocationNormalized, from: RouteLocationNormalized) => booleanInforme ao Nuxt para rolar até o topo antes de renderizar a página ou não. Se você quiser sobrescrever o comportamento padrão de rolagem do Nuxt, pode fazê-lo em
~/app/router.options.ts(veja roteamento personalizado) para mais informações.
[key: string]-
Tipo:
anyAlém das propriedades acima, você também pode definir metadados personalizados. Você pode querer fazer isso de uma maneira segura em termos de tipo aumentando o tipo do objeto
meta.
-
Exemplos
Uso Básico
O exemplo abaixo demonstra:
- como
keypode ser uma função que retorna um valor; - como a propriedade
keepalivegarante que o componente<modal>não seja armazenado em cache ao alternar entre vários componentes; - adicionando
pageTypecomo uma propriedade personalizada:
definePageMeta({
key: (route) => route.fullPath,
keepalive: {
exclude: ['modal']
},
pageType: 'Checkout'
})Definindo Middleware
O exemplo abaixo mostra como o middleware pode ser definido usando uma function diretamente dentro do definePageMeta ou definido como uma string que corresponde ao nome do arquivo de middleware localizado no diretório middleware/:
definePageMeta({
// define middleware como uma função
middleware: [
function (to, from) {
const auth = useState('auth')
if (!auth.value.authenticated) {
return navigateTo('/login')
}
if (to.path !== '/checkout') {
return navigateTo('/checkout')
}
}
],
// ... ou uma string
middleware: 'auth'
// ... ou múltiplas strings
middleware: ['auth', 'another-named-middleware']
})Usando uma Expressão Regular Personalizada
Uma expressão regular personalizada é uma boa maneira de resolver conflitos entre rotas sobrepostas, por exemplo:
As duas rotas "/test-category" e "/1234-post" correspondem tanto às rotas de página [postId]-[postSlug].vue quanto [categorySlug].vue.
Para garantir que estamos apenas correspondendo dígitos (\d+) para postId na rota [postId]-[postSlug], podemos adicionar o seguinte ao template da página [postId]-[postSlug].vue:
definePageMeta({
path: '/:postId(\\d+)-:postSlug'
})Para mais exemplos, veja Sintaxe de Correspondência do Vue Router.
Definindo Layout
Você pode definir o layout que corresponde ao nome do arquivo do layout localizado (por padrão) no diretório layouts/. Você também pode desativar o layout definindo layout como false:
definePageMeta({
// definir layout personalizado
layout: 'admin'
// ... ou desativar um layout padrão
layout: false
})※Esta página é uma tradução não oficial da documentação oficial do Nuxt.js.
A página correspondente na documentação oficial está aqui:
https://nuxt.com/docs/3.x/api/utils/define-page-meta