Étape 2 – Ajouter les liens de navigation
🎯 Objectifs
Dans cette étape, vous allez ajouter des liens de navigation dans la barre de navigation de l’application Pokédex vers les pages que vous avez créés précédemment.
Vos objectifs sont de :
- comprendre comment est construite la barre de navigation avec Vuetify.
- modifier le tableau
menuItems
pour ajouter les liens vers les pages créées à l’étape précédente. - ajouter une icône à chaque lien (Material Design Icons),
ℹ️ Contexte
🧭 Où se trouve le menu ?
Le menu de navigation se trouve dans le composant src/components/AppHeader.vue
.
🧱 Composants Vuetify utilisés dans AppHeader.vue
Composant | Rôle principal |
---|---|
<v-app-bar> | Barre de navigation principale, affichée en haut de l’écran |
<v-avatar> | Affiche une Poké Ball cliquable pour revenir à la page d’accueil |
<v-toolbar-title> | Affiche le titre "Pokédex" |
<v-spacer> | Pousse les éléments vers la droite |
<v-btn> | Bouton de navigation (généré pour chaque élément du menu) |
<v-icon> | Icône Material Design associée à chaque bouton |
Tableau menuItems
Dans la partie <script setup>
, vous verrez une constante nommée menuItems
.
C’est un tableau qui contient les liens de navigation affichés dans l’en-tête ( <v-app-bar>
).
Chaque élément de ce tableau représente un bouton cliquable avec :
- un
title
(le texte visible), - un
path
(l’adresse de la page), - une
icon
(l’icône associée).
📋️ Tâches
Dans
AppHeader.vue
, localisez le tableaumenuItems
.Complétez ce tableau pour ajouter les liens vers les autres pages :
- Favoris
- FAQ
- Monde Pokémon
Choisissez une icône pour chaque lien sur le site :
👉 https://pictogrammers.com/library/mdiTestez l’affichage des liens dans le menu en lançant
npm run dev
.
✅ Tests
Chaque bouton du menu doit rediriger vers l'une des pages créées à l’étape précédente :
/
→ Accueil/favoris
→ Favoris/faq
→ Foire Aux Questions/kantomap
→ Monde Pokémon
🔗 Références utiles
📦 Solutions
🗂️ src/components/AppHeader.vue
<template>
<!--
Barre d'application plate
* flat supprime l'ombre sous la barre
-->
<v-app-bar flat>
<!--
Conteneur de la barre d'application
* class="d-flex align-start align-center" aligne les éléments de manière flexible, alignés en haut et centrés verticalement
-->
<v-container class="d-flex align-start align-center">
<!--
Logo de l'application cliquable
* class="mr-4 pa-0 cursor-pointer" ajoute une marge à droite, retire le padding, et change le curseur pour indiquer la cliquabilité
* image définit le chemin vers le logo (Pokeball) de l'application
* size="64" définit la taille de l'avatar
* @click redirige vers la page d'accueil
-->
<v-avatar
class="mr-4 pa-0 cursor-pointer"
image="@/assets/pokeball.svg"
size="64"
@click="$router.push('/')"
/>
<!-- Titre de l'application affiché dans la barre -->
<v-toolbar-title>Pokedex ({{ pokemonStore.totalPokemons }})</v-toolbar-title>
<!--
Liens de navigation générés dynamiquement
* v-for parcourt chaque élément dans menuItems pour créer un lien de navigation
* :key utilise link.title pour définir une clé unique par lien
* :icon affiche l'icône spécifiée pour chaque lien
* :to utilise le chemin vers la route spécifiée pour chaque lien
-->
<v-btn
v-for="link in menuItems"
:key="link.title"
:icon="link.icon"
:to="link.path"
/>
</v-container>
</v-app-bar>
</template>
<script setup>
// Importer le magasin des pokémons
// @/ => représente le dossier src
import { usePokemonStore } from '@/stores/pokemonStore'
// Récupère le magasin des Pokémon
const pokemonStore = usePokemonStore()
/*
Définition des éléments de menu pour la navigation
- Chaque élément contient :
* title : le titre du lien
* path : le chemin de la route
* icon : l'icône du lien
*/
const menuItems = [
{ title: 'Accueil', path: '/', icon: 'mdi-pokeball' },
{ title: 'Favoris', path: '/favoris', icon: 'mdi-heart' },
{ title: 'FAQ', path: '/faq', icon: 'mdi-frequently-asked-questions' },
{ title: 'Kanto', path: '/kantomap', icon: 'mdi-map' },
// Ajouter ici les autres liens du menu.
// Vous trouverez des icônes sur https://pictogrammers.com/library/mdi/
// N'oubliez pas d'ajouter le préfixe 'mdi-' devant le nom de l'icône.
]
</script>