Élément de menu de navigation - DsfrNavigationMenuItem
🌟 Introduction
L'élément de menu de navigation est un composant conteneur qui représente un item individuel dans un menu déroulant. Il fournit la structure HTML appropriée et gère l'état actif.
Le composant DsfrNavigationMenuItem
encapsule un élément de liste (<li>
) avec les classes CSS appropriées du DSFR pour les menus déroulants.
Important
Ce composant NE devrait PAS être utilisé directement, il est utilisé en interne par son parent DsfrNavigationMenu
📐 Structure
L'élément de menu de navigation est composé des éléments suivants :
- un élément de liste
<li>
avec la classefr-menu__item
- un identifiant unique généré automatiquement (prop
id
) - l'attribut
aria-current="page"
quand l'élément est actif (propactive
) - un slot par défaut pour le contenu personnalisé (généralement un lien de menu)
🛠️ Props
nom | type | défaut | obligatoire | description |
---|---|---|---|---|
id | string | () => useRandomId(...) | Identifiant unique pour l'élément de menu | |
active | boolean | false | Indique si cet élément est actuellement actif |
📡 Événements
DsfrNavigationMenuItem
ne déclenche pas d'événements spécifiques.
🧩 Slots
DsfrNavigationMenuItem
possède un slot par défaut pour le contenu de l'élément.
nom | description |
---|---|
default | Slot par défaut pour le contenu de l'élément de menu (généralement un lien) |
📝 Exemples
Exemple d'utilisation de DsfrNavigationMenuItem
dans un menu :
vue
<template>
<DsfrNavigationMenu title="Services">
<DsfrNavigationMenuItem active>
<DsfrNavigationMenuLink
to="/carte-identite"
text="Carte d'identité"
/>
</DsfrNavigationMenuItem>
<DsfrNavigationMenuItem>
<DsfrNavigationMenuLink
to="/passeport"
text="Passeport"
/>
</DsfrNavigationMenuItem>
</DsfrNavigationMenu>
</template>
⚙️ Code source du composant
vue
<script lang="ts" setup>
import type { DsfrNavigationMenuItemProps } from './DsfrNavigation.types'
import { useRandomId } from '../../utils/random-utils'
export type { DsfrNavigationMenuItemProps }
withDefaults(defineProps<DsfrNavigationMenuItemProps>(), {
id: () => useRandomId('menu', 'item'),
})
</script>
<template>
<li
:id="id"
class="fr-menu__item"
:aria-current="active ? 'page' : undefined"
>
<!-- @slot Slot par défaut pour le contenu de l’item de liste. Sera dans `<li class="fr-nav__item">` -->
<slot />
</li>
</template>
ts
import type { RouteLocationRaw } from 'vue-router'
export type DsfrNavigationMenuLinkProps = {
id?: string
to?: string | RouteLocationRaw
text?: string
icon?: string
onClick?: ($event: MouseEvent) => void
}
export type DsfrNavigationMenuItemProps = {
id?: string
active?: boolean
}
export type DsfrNavigationMenuProps = {
id?: string
title: string
links?: DsfrNavigationMenuLinkProps[]
expandedId?: string
active?: boolean
}
export type DsfrNavigationItemProps = {
id?: string
active?: boolean
}
export type DsfrNavigationMegaMenuCategoryProps = {
title: string
active?: boolean
links: DsfrNavigationMenuLinkProps[]
}
export type DsfrNavigationMegaMenuProps = {
id?: string
title: string
description?: string
link?: { to: RouteLocationRaw, text: string }
menus?: DsfrNavigationMegaMenuCategoryProps[]
expandedId?: string
active?: boolean
}
export type DsfrNavigationMenuLinks = (DsfrNavigationMenuLinkProps | DsfrNavigationMegaMenuProps | DsfrNavigationMenuProps)[]
export type DsfrNavigationProps = {
id?: string
label?: string
navItems: (
DsfrNavigationMenuLinkProps
| DsfrNavigationMenuProps
| DsfrNavigationMegaMenuProps
)[]
}