O componente Error renderiza um elemento <main> que funciona em conjunto com o componente Header para criar um layout de altura total que se estende até a altura disponível da viewport.
--ui-header-height para se posicionar corretamente abaixo do Header.Use a prop error para exibir uma mensagem de erro.
404
The page you are looking for does not exist.
<template>
<NError
:error="{
statusCode: 404,
statusMessage: 'Page not found',
message: 'The page you are looking for does not exist.'
}"
/>
</template>
Use a prop icon para exibir um ícone acima do código de status.
404
The page you are looking for does not exist.
<template>
<NError
icon="i-lucide-file-x"
:error="{
statusCode: 404,
statusMessage: 'Page not found',
message: 'The page you are looking for does not exist.'
}"
/>
</template>
Use o slot #leading para exibir um elemento personalizado, como um logo.
404
The page you are looking for does not exist.
<template>
<NError
:error="{
statusCode: 404,
statusMessage: 'Page not found',
message: 'The page you are looking for does not exist.'
}"
>
<template #leading>
<img src="https://github.com/nuxt.png" alt="Logo" class="size-10 rounded-full" />
</template>
</NError>
</template>
Use a prop clear para personalizar ou ocultar o botão de limpar (com o valor false).
Você pode passar qualquer propriedade do componente Button para personalizá-lo.
404
The page you are looking for does not exist.
<template>
<NError
:clear="{
color: 'neutral',
size: 'xl',
icon: 'i-lucide-arrow-left',
class: 'rounded-full'
}"
:error="{
statusCode: 404,
statusMessage: 'Page not found',
message: 'The page you are looking for does not exist.'
}"
/>
</template>
Use a prop redirect para redirecionar o usuário para uma página diferente quando o botão de limpar é clicado. O padrão é /.
404
The page you are looking for does not exist.
<template>
<NError
redirect="/docs/getting-started"
:error="{
statusCode: 404,
statusMessage: 'Page not found',
message: 'The page you are looking for does not exist.'
}"
/>
</template>
error.vueUse o componente Error no seu error.vue:
<script setup lang="ts">
import type { NuxtError } from '#app'
const props = defineProps<{
error: NuxtError
}>()
</script>
<template>
<NApp>
<NHeader />
<NError :error="error" />
<NFooter />
</NApp>
</template>
app.vue dentro do seu arquivo error.vue para ter o mesmo layout e recursos; aqui está um exemplo: https://gitlab.nitro.news/nitro/ui/-/blob/main/docs/app/error.vuenuxt generate é recomendado adicionar fatal: true dentro da sua chamada de createError para garantir que a página de erro seja exibida:<script setup lang="ts">
const route = useRoute()
const { data: page } = await useAsyncData(route.path, () => {
return queryCollection('docs').path(route.path).first()
})
if (!page.value) {
throw createError({ statusCode: 404, statusMessage: 'Page not found', fatal: true })
}
</script>
| Prop | Default | Type |
|---|---|---|
as | 'div' | anyThe element or component this component should render as. |
error | Partial<NuxtError<unknown> & { message: string; }> | |
redirect | '/' | stringThe URL to redirect to when the error is cleared. |
clear | true | boolean | ButtonProps Display a button to clear the error in the links slot.
|
ui | { root?: SlotClass; statusCode?: SlotClass; statusMessage?: SlotClass; message?: SlotClass; links?: SlotClass; } |
| Slot | Type |
|---|---|
default | {} |
statusCode | {} |
statusMessage | {} |
message | {} |
links | {} |
export default defineAppConfig({
ui: {
error: {
slots: {
root: 'min-h-[calc(100vh-var(--ui-header-height))] flex flex-col items-center justify-center text-center',
statusCode: 'text-base font-semibold text-primary',
statusMessage: 'mt-2 text-4xl sm:text-5xl font-bold text-highlighted text-balance',
message: 'mt-4 text-lg text-muted text-balance',
links: 'mt-8 flex items-center justify-center gap-6'
}
}
}
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nitro/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
error: {
slots: {
root: 'min-h-[calc(100vh-var(--ui-header-height))] flex flex-col items-center justify-center text-center',
statusCode: 'text-base font-semibold text-primary',
statusMessage: 'mt-2 text-4xl sm:text-5xl font-bold text-highlighted text-balance',
message: 'mt-4 text-lg text-muted text-balance',
links: 'mt-8 flex items-center justify-center gap-6'
}
}
}
})
]
})