Appuyez sur Entrée pour voir vos résultats ou Echap pour annuler.

Apprendre Vue.js rapidement

Salut les devs 😀 Je prends un break de la série DIY. Je reviendrai avec une suite très ludique dans 2 semaines. Aujourd’hui, j’aimerais vous présenter le framework Vue.js de façon simple et rapide pour que vous puissiez vous faire une tête sur ce dernier.

Les sources de cet article sont disponibles sur GitHub.

Vue, c’est quoi?

Une est un framework JavaScript frontend développé par Evan You, un ancien de Google qui a participé au développement d’AngularJS (i.e. : version 1.x). En gros, l’objectif était de prendre le meilleur d’Angular et de créer un framework vraiment léger.

À l’instar d’Angular (i.e. : 2+), Vue propose du routage, des composants, du partage de portée (scope) et autres fonctionnalités utiles pour le développement d’applications complexes.

Il a été créé en 2014 et en est à la version 2.5.17 (au moment d’écrire ceci).

Démarrer un nouveau projet

Avant de partir, il nous faut @vue/cli qui nous permettra de générer la structure de base du projet. Contrairement à @angular/cli, le client en invite de commande de Vue.js est très limité et génère un tout petit peu de code poubelle qu’il faudra se départir.

Cette commande installera le client vue dans vos dépendances globales sur votre poste. Ensuite, créer un nouveau projet vue :

Choisir simplement les options par défaut! Comme tout bon cli, cette commande prend quelques minutes à exécuter. Lorsque ce sera terminée, il nous faudra ajouter le routeur aux dépendances pour obtenir l’application monopage tant convoitée. Pour se faire, naviguer dans le répertoire créé par la commande précédente et exécuter :

La structure

Une fois le tout complété, vous devriez obtenir une arborescence de fichiers qui ressemble à ceci :

 

Rapidement, public contient les fichiers statiques qui ne font pas partie du projet, contrairement à src/assets qui contiendra les images de l’application et autres fichiers. Le fichier index.html ne fait pas partie de Vue, mais c’est le point d’entrée principal.

Un peu plus bas, vous avez le main.js qui sert à démarrer l’application Vue. En théorie, vous ne devriez pas avoir le modifier.

Sous le main.js, vous trouverez router.js qui est la définition des routes. Si vous l’ouvrez, vous verrez que c’est très simple. Par défaut, @vue/cli crée deux routes et deux vues, soit deux composants de navigation :

Si vous regardez dans le répertoire views, vous verrez deux fichiers « .vue » qui correspondent à ces composants de navigation.

De plus, à la racine du répertoire src, vous trouverez un fichier App.vue qui est le composant principal d’application. Vous l’aurez compris, on se retrouve avec une hiérarchie de composants, comme ceci :

La structure d’un fichier « .vue »

Les fichiers « .vue » ont une structure particulière. Ils contiennent le code de la vue HTML, du composant en JavaScript ainsi que les styles propres au composant. Voici le plus simple exemple d’un composant :

Création des classes utilitaires

Dans un premier temps, créons les classes qui n’ont aucun lien avec Vue, soit notre service pour manipuler les todos dans le LocalStorage ainsi que l’objet ToDo.

Création d’un composant

Dans cet exemple, une application de todo, il y aura 3 composants de page et 2 composants réguliers. Les 3 pages sont : l’accueil, la création d’un todo et la liste des todos sauvegardés. Ces derniers sont persistés dans le LocalStorage du navigateur.

Puisque les composants de page utilisent les composants réguliers, commençons par ces derniers. Le premier sera le ToDoForm dont voici le code HTML :

Il y a quelques trucs intéressants ici. La directive v-if permet de rendre ou non un élément en se basant sur un booléen. Les variables showErrorMessage et showSuccessMessage sont déclarées dans le composant JS ci-dessous.

Sur l’élément de formulaire, la directive v-on permet d’y attacher un événement. Vue nous offre aussi des paramètres de directive pour les événements pour faciliter le travail, par exemple prevent qui execute event.preventDefault() pour éviter une soumission du formulaire au backend. La fonction handleClickCreateButton est déclarée ci-dessous.

Dernier point, v-model permet de faire un 2-way binding entre une propriété du composant JS et la vue HTML.

Ce code est celui du composant JS déclaré dans le même fichier ToDoForm.vue. On peut voir qu’il y a 3 propriétés intéressantes à l’objet exporté : data, methods et components.

La propriété data doit être une fonction. Elle permet d’initialiser l’état initial du composant. Le retour de cette fonction est un objet JSON dont les clés et valeurs seront exposées dans la vue HTML pour l’affichage.

La propriété methods, quant à elle, doit être un objet. Elle liste les méthodes accessibles dans la vue HTML pour la gestion des événements.

Finalement, components est aussi un objet dont la clé et la valeur sont respectivement un nom de composant et une instance de ce dernier, dans le cas où nous aurions à utiliser un sous-composant. Nous verrons comment plus loin.

Utilisation du composant dans une vue

Créons une vue de page appelée ToDoCreation.vue dont le code composant JS serait :

On importe simplement le composant, puis on le déclare dans l’objet components. Ceci nous permet de l’utiliser dans la vue :

Le composant de liste des todos

Pour démontrer le prochain concept, nous allons utiliser une vue qui affichera la liste des todos créés dans un tableau avec v-for :

Comme vous pouvez le constater, v-for nous permet de boucler dans une collection et rend une variable disponible pour chaque élément du tableau. La directive v-bind:key permet de définir une clé unique pour chaque ligne pour permettre un rafraîchissement optimal de la vue lorsque les données changent.

Dans notre composant JS, il nous faut simplement récupérer les todos via le service, puis rendre une variable disponible à la vue via la fonction data du composant :

Le principe est le même pour l’intégration de ce composant dans une vue de page, je vous laisse visiter GitHub pour le code source 🙂

Configuration du routeur

Pour que nous puissions utiliser les vues de page via une URL spécifique, il nous faut configurer le routeur. Il n’y a rien d’intéressant à expliquer, ça fonctionne comme la plupart des routeurs frontend :

Composant d’application

Finalement, il ne reste qu’à définir où les composants de page seront injectés ainsi qu’ajouter un menu de navigation. Ceci se fait dans le App.vue :

Très simplement, le composant de page ( ToDoCreation ou ToDoList) sera injecté dans router-view et les router-link produiront des liens de navigation pour le routeur!

Conclusion

Aujourd’hui, vous avez appris le 2-way binding, l’intégration d’un routeur, la gestion des événements et la hiérarchisation des composants en utilisant le framework Vue.js. Si vous avez des commentaires ou des suggestions pour de futurs articles, n’hésitez pas à m’en faire part sur les réseaux sociaux ou dans les commentaires ci-dessous.

Merci de nous lire chaque semaine! Si vous avez aimé celui-ci, partagez-le avec vos collègues et amis. Nous sommes fiers de pouvoir vous offrir du contenu gratuit et sans publicité et ce, chaque semaine depuis pratiquement 2 ans.

À +

Suivez-nous par courriel!

Saisissez votre adresse courriel pour vous abonner au blog d'Ezo et recevoir une notification de chaque nouvel article par email.