Error

GitHub
Eine vorgefertigte Fehlerkomponente mit NuxtError-Unterstützung.

Bearbeiten

Die Error-Komponente rendert ein <main>-Element, das zusammen mit der Header-Komponente ein Layout in voller Höhe erstellt, das sich auf die verfügbare Höhe des Ansichtsfensters erstreckt.

Die Error-Komponente verwendet die CSS-Variable --ui-header-height, um sich korrekt unter dem Header zu positionieren.

Fehler

Verwenden Sie die error-Prop, um eine Fehlermeldung anzuzeigen.

In den meisten Fällen erhalten Sie die error-Prop in Ihrer error.vue-Datei.

404

Page not found

The page you are looking for does not exist.

<template>
  <UError
    :error="{
      statusCode: 404,
      statusMessage: 'Page not found',
      message: 'The page you are looking for does not exist.'
    }"
  />
</template>

Icon: badge{label="4.8+" class="align-text-top"} (englisch)

Verwenden Sie die icon-Prop, um ein Symbol über dem Statuscode anzuzeigen.

404

Page not found

The page you are looking for does not exist.

<template>
  <UError
    icon="i-lucide-file-x"
    :error="{
      statusCode: 404,
      statusMessage: 'Page not found',
      message: 'The page you are looking for does not exist.'
    }"
  />
</template>

Verwenden Sie den #leading-Steckplatz, um ein benutzerdefiniertes Element, z. B. ein Logo, anzuzeigen.

404

Page not found

The page you are looking for does not exist.

<template>
  <UError
    :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>
  </UError>
</template>

Clear ist ein

Verwenden Sie die clear-Prop, um die Schaltfläche zum Löschen (mit dem Wert false) anzupassen oder auszublenden.

Sie können jede Eigenschaft der Komponente Button übergeben, um sie anzupassen.

404

Page not found

The page you are looking for does not exist.

<template>
  <UError
    :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>

Weiterleitung

Verwenden Sie die redirect-Prop, um den Benutzer auf eine andere Seite umzuleiten, wenn auf die Schaltfläche zum Löschen geklickt wird. Standardmäßig /.

404

Page not found

The page you are looking for does not exist.

<template>
  <UError
    redirect="/docs/getting-started"
    :error="{
      statusCode: 404,
      statusMessage: 'Page not found',
      message: 'The page you are looking for does not exist.'
    }"
  />
</template>

Examples Bearbeiten

Innerhalb error.vue

Verwenden Sie die Komponente Error in Ihrem error.vue:

error.vue
<script setup lang="ts">
import type { NuxtError } from '#app'

const props = defineProps<{
  error: NuxtError
}>()
</script>

<template>
  <UApp>
    <UHeader />

    <UError :error="error" />

    <UFooter />
  </UApp>
</template>
Vielleicht möchten Sie den Code Ihres app.vue in Ihrer error.vue-Datei replizieren, um das gleiche Layout und die gleichen Funktionen zu haben, hier ist ein Beispiel: https://github.com/nuxt/ui/blob/v4/docs/app/error.vue
Sie können mehr darüber lesen, wie Sie Fehler in der Nuxt-Dokumentation behandeln, aber wenn Sie nuxt generate verwenden, wird empfohlen, fatal: true in Ihren createError-Aufruf einzufügen, um sicherzustellen, dass die Fehlerseite angezeigt wird:
pages/[...slug].vue
<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>

API

Props Bearbeiten

Prop Default Type
as
'main'
any

The element or component this component should render as.

icon
any

The icon displayed above the status code.

error
Partial<NuxtError<unknown> & { message: string; }>
redirect
'/'
string

The URL to redirect to when the error is cleared.

clear
true
boolean | ButtonProps

Display a button to clear the error in the links slot. { size: 'lg', color: 'primary', variant: 'solid', label: 'Back to home' }

ui
{ root?: SlotClass; leading?: SlotClass; leadingIcon?: SlotClass; statusCode?: SlotClass; statusMessage?: SlotClass; message?: SlotClass; links?: SlotClass; }

Slots Bearbeiten

Slot Type
default
{}
leading
{ ui: object; }
statusCode
{}
statusMessage
{}
message
{}
links
{}

Theme Bearbeiten

app.config.ts
export default defineAppConfig({
  ui: {
    error: {
      slots: {
        root: 'min-h-[calc(100vh-var(--ui-header-height))] flex flex-col items-center justify-center text-center',
        leading: 'mb-4 flex items-center justify-center',
        leadingIcon: 'size-10 shrink-0 text-primary',
        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'
      }
    }
  }
})
vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/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',
            leading: 'mb-4 flex items-center justify-center',
            leadingIcon: 'size-10 shrink-0 text-primary',
            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'
          }
        }
      }
    })
  ]
})

Changelog (englisch)

No recent changes