Apprendre Vue.js 3 - Jour 1 : Concepts De Base
Maybe your like
Si vous désirez plus de contenu francophone comme celui-ci, cliquez Follow ou suivez-moi sur Twitter
Série d'article sur Vue.js 3
Bonjour, ceci est le premier article d'une série d'article qui couvrira le monde de Vue 3. Cet article se veut un résumé de mes notes et du coup un excellent aide-mémoire (cheat sheet)
Qu’est-ce que Vue.js ?
Vue.js est un framework progressif pour JavaScript utilisé pour créer des interfaces Web et des applications d'une page (SPA). Vue.js peut également être utilisé pour le développement d'applications de bureau et mobiles avec les frameworks Ionic et Electron.
Pourquoi Vue.js
Avant d’utiliser un framework il est important de comprendre dans quel contexte il s’avère le bon outil.
Voici donc la liste des différentes raisons qui pourraient justifier l’utilisation d’un framework comme Vue.js
- Organisation de votre code
- Efficacité/rapidité de développement
- Ré utilisabilité du code
- Maintenance et future développement
Extensions VSCode pour être productif avec Vue
- Vetur : Outils d'aide à coder comme la coloration syntaxique, le formating, intelliSense, Emmet, etc.
- Vue VsCode Snippets : Raccourci clavier pour ajouter des snippets dans votre code
- settings.json ajoute
Comment Utiliser/installer Vue.js
Vue est un framework dit progressif. Vous pouvez l’utiliser juste dans une petite partie de votre page web ou si vous préférez vous pouvez construire une application entière avec Vue.js.
Voici ce qu'il faut faire pour utiliser Vue seulement dans une partie de votre page web :
- Ajouter un tag 'script' qui contient un lien vers la librairie Vue.js
- Ajouter un autre tag 'script' qui contient un lien vers votre fichier application Vue (app.js)
- Créer une div avec id="app" qui servira de conteneur au rendu de votre application Vue.
Voici un exemple d'une page utilisant Vue.js
(index.html)
<html> <head> <title>Ma page Vue.js</title> </head> <body> <div id="app"> {{ title }} </div> <script src="https://unpkg.com/vue@next"></script> <script src="./app.js"></script> </boby> </html> Enter fullscreen mode Exit fullscreen mode(app.js)
// Fonction qui permet d'initialiser Vue.js Vue.createApp({ data() { return { title: "Hello Word Vue" } } }).mount('#app') // mount spécifie que l'application Vue s'affichera dans la div avec id="app" Enter fullscreen mode Exit fullscreen modeVariables Reactive
La fonction data() sert à créer des variables réactives qui seront utilisées dans votre application Vue. Chaque fois qu'une variable réactive est modifiée, si elle est affichée ou utilisé dans votre page, Vue la mettra à jour immédiatement.
Pour afficher une variable réactive ou une expression dans votre page vous devez utiliser les doubles crochets Vue remplacera le contenu de l'expression par sa valeur
// variable {{ title }} // expression {{ title.toUpperCase() }} Enter fullscreen mode Exit fullscreen modeLes directives Vue.js
Les directives Vue.js sont des attributs HTML qui peuvent être insérés dans votre page afin de modifier le rendu de votre application Vue.
Voici la liste des directives disponible:
v-bind
Permet d'assigner une expression à un attribut. Vue va remplacer l'expression par sa valeur
(ex: image_url : "http://www.exemple.com/car.jpg"
<img v-bind:src="image_url" /> // ou syntaxe raccourcie <img :src="image_url" /> Enter fullscreen mode Exit fullscreen modev-once
Avec la directive v-once Vue va interpolé l'expression seulement une fois. L'expression sera donc ignorée pour tous les autres rafraîchissements
<div v-once> {{ title }} </div> Enter fullscreen mode Exit fullscreen modev-html
Permet d'afficher une expression avec des tags HTML.
Ex: title: "
Hello World" <div v-html="title"> </div> Enter fullscreen mode Exit fullscreen modev-model
Permet de lier la valeur d'un champ de saisie avec une variable. Si vous modifiez l'un ou l'autre Vue mettra à jour automatiquement l'autre. Du coup, la variable et le champ de saisie auront toujours la même valeur.
<input v-model="name" type="text" /> <div> Nom : {{ name }} </div> Enter fullscreen mode Exit fullscreen modev-if, v-else-if et v-else
Rend un élément visible ou invisible selon la valeur vrai ou faux de l'expression. Lorsque non visible l'élément n'est pas rendu dans le html
<div v-if="montant > 100"> Livraison gratuite! <div> <div v-else-if="montant > 50"> Livraison 9.95$ </div> <div v-else> Livraison 19.95$ </div> Enter fullscreen mode Exit fullscreen modev-show
Rends un élément visible ou invisible selon la valeur vrai ou faux de l'expression. Par contre, l'élément reste toujours présent dans le rendu. Lorsque non visible l'élément est rendu avec l'attribut CSS: display: none;
<div v-show="isError"> {{ errorMessage }} </div> Enter fullscreen mode Exit fullscreen modev-for
Permet d'afficher une liste d'élément
<ul> <li v-for="item in items" :key="item.id"> {{ item.name }} </li> </ul> Enter fullscreen mode Exit fullscreen modeÀ noter le mot-clé "key" est nécessaire pour permettre à Vue d'identifier uniquement l'élément
Ref
Permet à votre application Vue d'identifier un élément HTML et d'effectuer des actions sur cet élément.
Identification avec la directif ref
<input type="text" ref="name"> Enter fullscreen mode Exit fullscreen modeManipulation à partir de votre code Vue en utilisant le mot-clé spécial : $refs
methods: { handleClick() { console.log(this.$refs.name) this.$refs.name.classList.add('active') this.$refs.name.focus() } } Enter fullscreen mode Exit fullscreen modev-bind sur l'attribut "class" et les "style"
Il est possible de faire un v-bind sur l'attribut class et style
<div class="text-2xl" :class="isAdmin ? 'text-red-500' : 'text-gray-500'"> Hello World </div> Enter fullscreen mode Exit fullscreen modeÀ noter que l'attribut class est utilisé deux fois. Vue va regrouper ces deux attributs lors du rendu.
Il est également possible d'utiliser un objet pour envoyer du contenu dans notre attribut "class"
<div :class="{ 'text-red-500': isAdmin, 'text-gray-500': !isAdmin }"> Hello World </div> Enter fullscreen mode Exit fullscreen modeÀ noter la syntaxe de l'objet { attribut : expression } si l'expression retourne vrai alors l'attribut sera ajouté à la class
Une syntaxe similaire s'applique à l'attribut style
<div :style="{'margin-top': '10px', 'padding': '5px'"> Hello World </div> Enter fullscreen mode Exit fullscreen modeEnfin les attributs class et style peuvent être définis par une variable de type objet créé ailleurs dans votre application.
titleClass: { 'text-red-400': this.isAdmin, 'text-gray-500': !this.isAdmin } Enter fullscreen mode Exit fullscreen mode <div :class="titleClass"> Hello World </div> Enter fullscreen mode Exit fullscreen modeL'élément < template>
Cet élément permet d'utiliser des directives de Vue sans créer un élément html.
<template v-show="quantity === 0"> La quantité doit être supérieure à zéro </template> Enter fullscreen mode Exit fullscreen modeLes Événements
Vue permet de gérer les événements javascript comme click, input, change, etc. Pour ce faire vous devez utiliser la directive v-on: suivi du nom de l'évènement.
v-on:click
Permet d'exécuter du code sur le click d'un élément
<button v-on:click="name = 'Mike'">Afficher message</button> // ou syntaxe raccourcie <button @click="name = 'Mike'">Afficher message</button> Enter fullscreen mode Exit fullscreen modev-on:keydown
Permet d'exécuter du code sur l'appuie d'une touche (ex. enter)
<button v-on:keydown.enter="name = 'Mike'">Afficher message</button> // ou syntaxe raccourcie <button @click="name = 'Mike'">Afficher message</button> Enter fullscreen mode Exit fullscreen modeAutre valeurs possible pour v-on:keydown, keyup, keypress
Autre valeur possibles pour .enter, tab, esc, up, down, left, right, delete
v-on :submit
Permet d'exécuter du code lors de la soumission d'un formulaire
<form v-on:submit.prevent="name = 'Mike'"> <input v-model="name" type="text" /> <button type="submit">Sauvegarde</button> </form> Enter fullscreen mode Exit fullscreen modeÀ noter, la présence de ".prevent" après la directive v-on:submit. Cette instruction va prévenir la soumission du formulaire au serveur.
Les méthodes
Vue js permet de créer des méthodes afin d'y placer un block de code réutilisable dans votre application. Voici la syntaxe pour créer une méthode :
Vue.createApp({ data() { return { name: "Mike Taylor", } }, methods: { resetName() { this.name = '' } } }).mount('#app') Enter fullscreen mode Exit fullscreen modeÀ noter le mot-clé 'this' placé en avant de la variable name. Ce mot-clé est obligatoire pour permettre de référencer une variable à l'intérieure de notre instance de Vue.
Pour appeler une méthode vous pouvez le faire simplement en utilisant son nom.
<input v-model="name" type="text" /> <button @click="resetName" type="text">Effacer</button> Enter fullscreen mode Exit fullscreen modeUne méthode peut également contenir des paramètres
methods: { resetName(newName) { this.name = newName } } Enter fullscreen mode Exit fullscreen mode <input v-model="name" type="text" /> <button @click="resetName('John')" type="text">Effacer</button> Enter fullscreen mode Exit fullscreen modeUne méthode peut également envoyer l'objet event
methods: { resetName(newName, e) { this.name = newName console.log(e.target.textContent) } } Enter fullscreen mode Exit fullscreen mode <input v-model="name" type="text" /> <button @click="resetName('John', $event)" type="text">Effacer</button> Enter fullscreen mode Exit fullscreen modeÀ noter le paramètre spécial $event va envoyer l'objet event à notre méthode
Les méthodes "computed"
Contrairement aux autres méthodes qui vont se ré-exécuter à chaque rendu de votre application, les méthodes "computed" vont être ré-exécuté seulement si les variables qu'elle contient sont modifiées.
computed: { recalculerTotal(items, taxes) { return this.calculerTotal(items, taxes) } } Enter fullscreen mode Exit fullscreen modeLes méthodes "computed" peuvent ensuite être appelé dans notre page.
<button @click="recalculerTotal">Re-Calculer</button> Enter fullscreen mode Exit fullscreen modeÀ noter qu'aucun paramètre ni parenthèse ne sont utilisés
Les méthodes "watch"
Ces méthodes vont "regarder" une variable et dès quelle change exécutera le code de la méthode.
watch: { title(newTitle, oldTitle) { console.log(`Le titre ${oldTitle} a changé pour ${newTitle}`) } } Enter fullscreen mode Exit fullscreen modeLes méthodes "Lifecycle Hook"
Chaque instance de vue traverse une série d’étapes d’initialisation au moment de sa création - par exemple, elle doit mettre en place l’observation des données, compiler le template, monter l’instance sur le DOM et mettre à jour le DOM quand les données changent.
En cours de route, elle va aussi invoquer des hooks de cycle de vie, qui nous donnent l’opportunité d’exécuter une logique personnalisée à chaque étape.
Par exemple, le hook "created" est appelé une fois l’instance créée
created() { console.log('Mon instance est created') } Enter fullscreen mode Exit fullscreen modeIl existe plusieurs autres méthodes hook. En voici quelques-unes :
- beforeCreate
- created
- beforeMount
- mounted
- beforeUpdate
- updated
- beforeDestroy
- destroyed
Les "Components"
Vue.js est un framework qui permet et encourage l'organisation de votre application en plusieurs "components"et sous "components"
Chaque élément distinct de votre page devra avoir son propre component. Par exemple la barre de navigation pourrait être contenue dans un component NavBar et réutilisé sur plusieurs pages.
Voici la syntaxe pour créer des "components" et utiliser Vue seulement dans une petite partie de votre page.
const app = Vue.createApp({ data() { return { message: 'Un message' } }, methodes: { deleteUser(userID) { console.log(`User ${userID} deleted`) } } )} app.component('nav-bar', { template: ` <div> {{ title }} ...navigation bar code... </div> `, props: { title: { type: String, required: true, default: 'Mon application' } }, methods: { sendDelete() { const userId = 10 this.$emit('delete', userId) } } } app.mount('#app') Enter fullscreen mode Exit fullscreen modeLes "components" créés peuvent ensuite être utilisés comme des tags HTML dans votre page
<div> <nav-bar title="Mon application" v-on:delete="deleteUser($event)" /> </div> Enter fullscreen mode Exit fullscreen modeL'élément "template" contient le HTML qui sera rendu à l'endroit où vous avez placé votre tag component dans votre page HTML.
L'objet "props" définit quelle data est attendue lors du rendu du component
props: { title: { type: String, required: true, default: 'Mon application' } }, Enter fullscreen mode Exit fullscreen modeProps peut également être utilisé avec une syntaxe raccourcie
props: ['title'], Enter fullscreen mode Exit fullscreen modeVous pouvez par la suite assigner une valeur à ces props lors de l'utilisation du component
<div> <nav-bar title="Mon application" /> </div> Enter fullscreen mode Exit fullscreen modeEnfin, le mot-clé $emit permet d'émettre un événement. Cet évènement pourra ensuite être capté par votre application avec un v-on:nom-event
methods: { sendDelete() { const userId = 10 this.$emit('delete', userId) } } Enter fullscreen mode Exit fullscreen mode <div> <nav-bar title="Mon app" v-on:delete="deleteUser" /> </div> Enter fullscreen mode Exit fullscreen modeCréer une application entière avec Vue CLI
L'outil pour créer un projet Vue.js est Vue CLI. Vous devrez l'installer.
npm install -g @vue/cli Enter fullscreen mode Exit fullscreen modeVue create
Permet de créer un projet Vue.js avec plein de trucs déjà préconfiguré pour vous.
vue create my-app-name Enter fullscreen mode Exit fullscreen modenpm run serve
Une fois l'application créée vous pouvez vous positionner dans le dossier et lancer le serveur de développement.
cd my-app-name npm run serve Enter fullscreen mode Exit fullscreen modeVue add
Il est possible d'ajouter des plugin/librairie à votre projet Vue en utilisant le raccourcis vue add. Voici 3 exemples :
vue add vue-router vue add vuex vue add tailwind Enter fullscreen mode Exit fullscreen modePoint de départ
Vue CLI va créer plusieurs dossiers et fichiers. Le point de départ est public/index.html et "src/main.js"
import { createApp } from "vue"; import App from "./App.vue"; createApp(App).mount("#app"); Enter fullscreen mode Exit fullscreen modeLe component qui sert de point d'entrée est donc App.vue
Avec une application Vue, aucun code HTML ne sera écrit dans le fichier index.html. Votre code HTML sera écrit dans la section de chacun de vos components
Vite
Il est également possible de créer un projet avec Vite. C'est un outil plus récent et plus efficace
npm init @vitejs/app my-app-name --template vue Enter fullscreen mode Exit fullscreen modeCette commande va créer exactement un projet Vue.js avec les mêmes préconfigurations que le Vue-CLI
Avec un projet Vite, la commande pour lancer le serveur est
npm install npm run dev Enter fullscreen mode Exit fullscreen modeLes Single-File Component
Chaque component Vue est défini dans son propre fichier .vue avec la syntaxe suivante
<template> <img alt="Vue logo" src="./assets/logo.png" /> <HelloWorld msg="Hello Vue 3 + Vite" /> {{ message }} </template> <script> import HelloWorld from './components/HelloWorld.vue' export default { components: { HelloWorld }, data() { return { message: 'Hello World' } }, } </script> <style scope > #app { font-family: Avenir, Helvetica, Arial, sans-serif; text-align: center; color: #2c3e50; } </style> Enter fullscreen mode Exit fullscreen modeÀ noter qu'avec l'utilisation des single-file-component, le code HTML du component est saisi dans la section template. Il n'est pas saisi dans la div #app de votre index.html
Comme démontré dans le dernier exemple, Il est possible d'utiliser un autre "component" à l'intérieur de votre component actuel.
<template> <HelloWorld msg="Hello Vue 3 + Vite" /> </template> Enter fullscreen mode Exit fullscreen modePour cela il faut utiliser import:
import HelloWorld from './components/HelloWorld.vue' Enter fullscreen mode Exit fullscreen modeEmplacement des fichiers components
Les Single-File-Component sont sauvegardés dans un dossier src/components ou src/pages selon si le component agit à titre de page (ex. About.vue) ou à titre de component réutilisable (ex. NavBar.vue)
Les SlotsLes slots permettent d'ajouter du contenu à un component
<custom-button> Je peux ajouter du contenu... Titre: {{ title }} </custom-button> Enter fullscreen mode Exit fullscreen modeÀ noter que le rendu de 'title' se fera dans le component parent. Le même principe s'appliquera pour le css. Donc le contenu de la slot doit être défini/accessible dans le component parent
À l'interne le custom-button ressemble à quelque chose comme ceci:
<template> <slot></slot> </template> Enter fullscreen mode Exit fullscreen modeLa balise slot va être remplacée par le contenu de 'custom-button'
Il est possible de définir une valeur par défaut pour la slot
<template> <slot>Si rien n'est spécifié je vais m'afficher</slot> </template> Enter fullscreen mode Exit fullscreen modeÀ noter, que la valeur par défaut est défini dans le component enfant, donc devra utiliser les variables ou le css définit dans le component enfant.
Les slots multiples
Permet d'ajouter du contenu associé seulement à un slot en particulier
<custom-button> Je peux ajouter du contenu... <template #title> {{ title }} </template> </custom-button> Enter fullscreen mode Exit fullscreen mode'#title' identifie la template au slot title. La syntaxe v-slot:title peut également être utilisé
À l'interne le custom-button ressemble à quelque chose comme ceci:
<template> <slot></slot> <slot name="title"></slot> </template> Enter fullscreen mode Exit fullscreen modeÀ noter que le slot principal est toujours disponible
(les balises ici sont optionnelles) mais il est possible d'ajouter un second slot avec un nom.
Slot Props
Les slots peuvent avoir des props
<template> <slot name="title" satus="info"></slot> </template> Enter fullscreen mode Exit fullscreen modeLes Props peuvent ensuite être utilisés
<custom-button> Je peux ajouter du contenu... <template #title="titleProps"> {{ title }} {{ titleProps.status }} </template> </custom-button> Enter fullscreen mode Exit fullscreen modeIl est possible de définir des Props pour les slots principal en utilisant '#defaut'
<template> <slot type="ajout"></slot> <slot name="title" status="info"></slot> </template> Enter fullscreen mode Exit fullscreen mode <custom-button> <template #default="defaultProps"> Je peux ajouter du contenu... {{ defaultProps.type }} </template> <template #title="titleProps"> {{ title }} {{ titleProps.status }} </template> </custom-button> Enter fullscreen mode Exit fullscreen modeÀ noter que s’il n'y a pas de named slot. Il est possible d'utiliser les Props du défaut avec cette syntaxe
<custom-button #default="defaultProps"> Je peux ajouter du contenu... {{ defaultProps.type }} </custom-button> Enter fullscreen mode Exit fullscreen modeConclusion
Merci d'avoir lu cet article. Si vous avez aimé ou si vous avez des commentaires n'hésitez pas à les enter ici bas.
Tag » Apprendre Vue Js 3
-
Apprendre Vue.js 3 - Jour 3 : Vuex - DEV Community
-
Apprendre à Utiliser Vue JS 3 En Ligne | Skilleos
-
Tutoriel VueJS 3 Pour Les Débutants - Gekkode
-
Créez Une Application Web Avec Vue.js - OpenClassrooms
-
Vue.js 3 - La Formation Complète Pour Débutants | Udemy
-
Introduction - Vue.js
-
[ Tuto ] Vue JS 3 : Les Bases ! ( Tutorial Pour Débutant En Français )
-
Apprendre VueJS | Grafikart
-
Les Bases De Vue.JS 3 - Introduction Et Installation - Training-dev
-
Formation Vue JS 3 : Maîtriser Les Bases - Alphorm
-
Formation En Ligne : Maîtrisez Le Framework Vue.js 3 - Neoddity
-
Formation Complète Vue.js 3 - DevTheory
-
[PDF] Vue.js - RIP Tutorial
-
Premiers Pas Avec Vue.js - Learn | Microsoft Docs