POKédex avec Vue js

Tags :
  • POK
  • Vue
  • web
Auteur :
  • Lola Perdrix
2024-2025

Création d'une app web pour utiliser un pokédex en utilisant le framework Vue js.

Prérequis

Bases en développement web front-end

Ce POK me sert de support pour apprendre à utiliser le framework Vue js, à travers la réalisation d'un application web sympathique répertoriant tous les pokémons / un pokédex, pour continuer sur ma lancée.

Lien vers le code du site

Planning

Sprint 1

Phase de prise en main et de préparation :

Sprint 2

Phase de réalisation :

Note

Au début de ce projet, je n'ai aucune idée de la complexité du framework et de ma capacité à prendre en main la techno, c'est pourquoi la gestion des tâches est très imprévisible...

Premier Sprint

Non prévu :

Horodatage

DateHeures passéesIndications
Jeudi 16 janvier1h30Découverte des autres MON, de la doc de Vue, et début du tutoriel proposé
Vendredi 17 janvier1h30Fin du tuto, initialisation d'un projet en local
30minRecherche d'autres tutos et nettoyage du projet installé par défaut
2hMaquette Figma
Samedi 18 janvier1hLecture de la doc PokéAPI, récupération et affichage en vrac des données souhaitées
1hChangement d'API et débugage
1hStructuration du composant "fiche", tests des différentes fonctionnalités de Vue apprises sur mon composant
30minAjout des boutons permettant de passer au suivant ou au précédent
1hCréation d'un composant pour la liste non détaillée

Découverte de Vue

Je me suis essentiellement basée sur la documentation officielle de Vue, pour comprendre le fonctionnement global.

Ce qu'il faut retenir :

Le tutoriel est très bien fait et nous fait pratiquer sur toutes les fonctionnalités essentielles : je conseille et je trouve que j'ai appris très vite.

Initialisation du projet Vue

J'ai choisi de suivre la démarche explicitée sur le site de la doc : Quick Start.

Après avoir effectué les lignes de commande dans mon terminal, j'obtiens tous les fichiers nécessaires à mon projet avec une page créée par défaut.

J'ai ensuite supprimé tout ce qui était inutile pour repartir d'un projet vide.

Maquette du site

Avant de me lançer directement dans la conception de mon site, j'ai réuni quelques inspirations et ai réfléchi au rendu voulu, puis j'ai donné vie à tout ça en créant ma maquette Figma.

4 fonctionnalités recherchées :

Le tout dans un design épuré avant tout fonctionnel.

Page accueilFavorisFiche détaillée
page accueilpage filtrepage fiche

Récupération des données

Pour récupérer les données spécifiques de tous les pokémons, je me suis premièrement dirigée vers la PokéAPI qui détient toutes les infos (il y en a vraiment plein !!) et les met à disposition gratuitement et simplement. J'ai passé un peu de temps à mettre en place ce que je voulais pour me rendre compte de différents problèmes :

C'est pourquoi j'ai finalement opté pour une autre API qui résoud tous les problèmes précédents : Tyradex API

En m'aidant du tuto Vue réalisé et des exemples fournis par la doc de Vue, j'ai été en mesure rapidement de récupérer et d'afficher de manière dynamique toutes les infos que je voulais pour mes fiches descriptives par pokémon. Il est aussi aisément possible grace à la syntaxe de Vue de passer d'un fiche à l'autre par de simple boutons. Cela donne ceci de manière brute :

Fiche pokemon brute

Début de pokédex

Enfin, avec une boucle et quelques propriétés, j'ai créé la liste de tous les pokémons disposés dans une grille avec uniquement les infos principales pour faire la base de mon site. Et voilà !

Premier pokédex

Conclusion Sprint 1

Pour ce sprint, je n'ai pas rencontré de difficultés majeures, et ai même pu prendre un peu d'avance sur le prochain sprint car il me restait du temps et j'ai pris conscience que celui-ci serait chargé. La syntaxe de Vue a été plus rapidement prise en main que prévue et tant mieux. Je me rends compte que cela permet de faire de grands raccourcis dans le code !

Là où j'ai eu plus de mal, c'était avec la récupération des données, avec des soucis au niveau du choix et de l'utilisation des API, et ai eu pas mal de bugs avec l'affichage des données liés à la requête ou à la syntaxe rigoureuse de Vue pas encore totalement maîtrisée. Je pense rencontrer plus de difficultés dans le prochain sprint quand il faudra imbriquer les composants.

Second Sprint

Réajustement du sprint planning

Mettre en place le site final :

Horodatage Sprint 2

DateHeures passéesIndications
Mercredi 29 janvier2h30Composant side bar vierge et structure de la page principale
Jeudi 30 janvier2h15Style de la fiche détaillée
Samedi 01 février15 minStyle du pokédex
15 minAjout logo side bar
1hAjout navigation side bar
2h30Ajout recherche manuelle side bar
Dimanche 02 février2h30Ajout des autres filtres side bar

Ajout du style sur les composants et sur la page principale

Reprendre les bases

Le style de mon site est quasiment ce qui m'a demandé le plus de temps. En effet j'ai eu du mal à agencer mes éléments sur la page comme je le voulais, et me suis rendue compte que j'avais de grosses lacunes sur CSS que je n'ai pas pu ignorer cette fois-ci. J'ai donc du me poser pour revoir les bases de CSS surtout au niveau des positions, des displays, en particulier les flexbox qui ont ensuite permis de construire la plupart des éléments du site.

J'y ai passé beaucoup de temps au début du sprint, pour ensuite appliquer l'agencement avec les flexbox tout au long du développement de mes fonctionnalités.

Style des composants

J'ai alors pu mettre ces connaissances en application en stylisant mes composants pour qu'ils correspondent à ma maquette Figma.

Liste des cartes / Pokédex styliséCarte détaillée stylisée
Carte simple styliséeCarte simple stylisée

Note

Pour la couleur de fond derrière les types, je les ai attribués dynamiquement selon un dictionnaire associant un type à une couleur spécifique.

Volet latéral

Le 3e composant qu'il me fallait pour mon site était le volet latéral sur lequel trouver les boutons de navigation ainsi que les filtres. Pourquoi est-ce un composant à part entière ? Je ne sais pas trop comment j'ai défini quels éléments devaient être des composants, cela m'a semblé intuitif bien que je ne sois pas sûr que ce soit le mieux.

Structure de base

J'ai organisé mon menu en flex box verticales, en y ajoutant d'abord un logo et des barres de navigation permet de passer d'une vue à l'autre.

Menu viergeLogoNavigation
Menu viergeLogoNavigation

Favoris

J'ai laissé un onglet "favori" qui devrait servir à afficher uniquement nos pokémons mis en favori, cependant je me suis rendue compte pour cela que le site devait mémoriser ces pokémons en question en fonction des utilisateurs et donc cela nécessiterait la création d'une base de données et une gestion des utilisateurs que je n'ai pas du tout le temps de traiter durant ce POK... C'est donc un bouton désactivé pour l'instant.

Recherche manuelle

La recherche manuelle était une fonctionnalité essentielle de mon site. Pour la réaliser, je me suis inspiré de cas similaires sur la documentation : exemple - grille avec filtre.

Le fonctionnement repose sur cette logique :

J'ai aussi rajouté ultérieurment la possibilité d'entrer un numéro d'identifiant dans la recherche manuelle pour permettre de rechercher par numéro de pokédex, il fallait juste rajouter une condition "OU" au filtre.

Résultats

Autres filtres

Pour les autres filtres, j'ai procédé plus ou moins de la même manière avec un autre type d'input. Je le synchronise à une variable, que je synchronise elle-même avec une variable de l'élément parent avec un écouteur d'événement, qui va actualiser la liste filtrée en rajoutant une condition de filtres aux précédentes.

Ainsi, on peut accumuler plusieurs filtres, cela aura pour effet de superposer les conditions de filtrage.

J'ai aussi rajouté le nombre de résultats retournés en bas du volet car je trouvais cela fonctionnel.

Résultats

Conclusion Sprint 2

Pour ce deuxième sprint, j'ai comme prévu rencontré plus de difficultés, notamment au niveau du style de la page avec les flex box que j'ai du réétudier un moment, mais aussi pour agencer les composants entre eux et réussir à faire passer des données ou des propriétés d'un composant à l'autre.

Hélas, j'ai du un peu déborder sur le planning et c'est notamment du à mon envie de faire quelque chose de propre malgré le temps imparti...

Même si j'ai du abandonner le système de favoris, mon travail correspond bien à mes attentes et j'ai appris plein de nouvelles choses notamment sur les mécanismes spécifiques au framework Vue js, ce qui était l'objectif !

A Suivre

Lors de mon tout dernier MON, je vais étudier les techniques pour rendre un site responsive. J'espère alors pouvoir appliquer ce que je vais apprendre à ce POK pour permettre de l'améliorer et de le rendre utilisable depuis un smartphone.

L'idéal serait aussi d'y implémenter mon mémory réalisé durant le POK 2, sur mon temps libre avant de commencer mon MON pour plus de challenge.

Sources