Séance 1 : Concepts et installation
Last updated
Last updated
Ce cours se base sur la version 3 de Vue.js. Attention vous trouverez beaucoup d'exemple en Vue.js 2 sur les forums et sites d'aide.
La documentation officielle se trouve ici sur le lien suivant
Assurez vous de disposer de nodeJs et de npm fonctionnels, testez avec la commande ci-dessous
npm --version
Pour créer un nouveau projet, tapez la commande suivante :
Lors de la première execution, la commande va vous proposer d'installer create-vue. Confirmez la proposition
Répondez aux différentes questions. Par défaut mettez toutes les questions sur non, sauf "Add Vue Router for single Page Application development" que vous pouvez mettre sur yes.
Executez les commandes suivantes :
La première commande accède au répertoire, la deuxième installe toute les dépendances (comme composer install
avec PHP/Syfmony), la dernière lance le serveur qui va s'occuper de compiler les fichiers et rendre l'application "Vue.js" utilisable dans tous les navigateurs.
Vous devriez voir un message vous proposant l'url de votre projet "compilé". Ouvrez-là et vous devriez avoir une page similaire à celle ci-dessous :
Dans le composant App.vue qui est créé par défaut, et qui est le point d'entrée de votre application, nous allons faire les premiers tests.
Nous allons définir une liste de 3 éléments, par exemple :
Si on souhaite rendre cette liste "dynamique", on peut définir des variables pour les notes. La syntaxe est identique à Twig pour les variables...
Si vous testez de nouveau ce code, vous aurez une erreur car les variables n'existent pas. Nous devons les définir.
Pour cela, dans la partie javascript de notre fichier App.vue, nous allons définir une "entrée" data, qui va contenir nos valeurs.
La déclaration pourrait être (en vue2 ou vue3 "classique":
Nous utiliserons la notation qui est préconisée avec la version 3 de Vue.js le "mode Composition API" (https://vuejs.org/guide/extras/composition-api-faq.html)
Notre code dans la partie script se résume donc à :
node_module : contient toutes les dépendances de notre projet. Il est créé par la commande npm install
. Il ne faut rien modifier dans ce dossier, et ne jamais le gérer avec git. Son équivalent dans Symfony est vendor.
public : c'est le repertoire "public", qui contient les éléments type images, favicon, les fichiers uploadés par vos utilisateurs, ... Il a le même rôle que "public" dans symfony.
src : c'est notre répertoire de travail, la très grande majorité de notre code se trouvera dans ce dossier.
index.html : c'est le fichier html de base qui est affiché dans le navigateur et qui va intégrer nos composants Vue.js. Sa syntaxe est décrite par la suite.
package.json (et son package-lock.json), sont la liste des dépendants installées, c'est l'équivalent du composer.json pour le back.
vite.config.js : c'est l'automatisateur de tâches (comme gulp ou webpack, Vue.js 3 recommande l'usage de Vite qui est plus rapide et performant). Nous reviendrons sur ce fichier en BUT3. Il récupère tous les éléments du dossier src/, va les traduires en du JavaScript compréhensible par les navigateurs et en faire un seul et unique point d'entrée.
ligne 10 : ce élément, avec un id "app" est l'élément qui va pouvoir recevoir notre code, nous le verrons avec le fichier main.js. Vous pourriez avoir plusieurs balises recevant plusieurs parties Vue.js. Vous pourriez aussi avoir un habillage HTML défini dans cette page et un "morceau" géré par Vue.js.
ligne 11 : C'est l'intégration du fichier main.js qui va contenir tout notre code JavaScript et les composants Vue.js.
assets : votre CSS/SCSS ... global à votre projet. Les logos et images du site.
components : nos composants Vue.js, des parties d'une page, qui seront assemblés pour faire votre page globale.
router : contiendra nos routes de notre site, le lien entre l'URL, les pages Vue.js.
views : les pages "Vue.js", qui assemblent les composants.
App.vue : notre composant principal, décrit par la suite
main.js : le fichier utilisé par ViteJs pour faire le lien entre les fichiers Vue.js, et la page index.html.
Cette structure est la base, vous pouvez l'organiser autrement, et ajouter toute la décomposition nécessaire.
Ce fichier est construit selon la structure "classique" de Vue.js, décrite dans la partie suivante.
Si on utilise vue en mode "composant" (https://fr.vuejs.org/guide/scaling-up/sfc.html#introduction) (c'est à dire avec des fichiers .vue ou SFC (single file component)) et en mode Composition API, un fichier .vue à les éléments suivants :
template : qui contient le code HTML de votre composant (une partie de votre page). Ce code peut exploiter lui même d'autres composants Vue.js. La balise template doit contenir un seul enfant dans le dom.
script : qui va contenir votre code JavaScript : les variables, les méthodes, les différents imports...
style : optionnel, pour contenir le CSS propre au composant.
Si les SFC nécessitent une étape de compilation, les avantages sont nombreux en contrepartie :
Créer des composants modulaires en utilisant une syntaxe HTML, CSS et JavaScript familière.
Templates précompilés sans coût de compilation au runtime
Meilleures optimisations à la compilation grâce à l'analyse croisée du template et des scripts.
Support des environnements de développement avec autocomplétion et vérification des types pour les expressions dans le template.
Prise en charge nativement du remplacement de modules à chaud (HMR).
SFC est une caractéristique déterminante de Vue en tant que framework, et c'est l'approche recommandée pour utiliser Vue dans les scénarios suivants :
Applications à page unique (SPA)
Génération de sites statiques (SSG)
Tout front-end non trivial pour lequel une étape de construction peut être justifiée pour une meilleure expérience de développement (DX).
C'est le fichier clé de votre application, l'équivalent du index.php de Symfony, car c'est lui qui contrôle tout ce qui va se passer, c'est le point d'entrée. c'est dans ce fichier que l'on peut instancier des dépendances globalements (comme router ici)
Ligne 1 : Import de Vue.js, et du composant createApp pour construire l'application (utilisé ligne 7)
Ligne 2 : On importe notre composant Vue.js App.Vue pour pouvoir l'exploiter dans notre fichier, et ici l'injecter dans la page ligne 7
Ligne 3 : le router pour gérer nos routes. On l'associe à notre application (ligne 9)
Ligne 5 : on importe notre CSS (ou autre), pour l'appliquer globalement au projet. Si c'est du Scss/Sass, ViteJs se chargera de le compiler en CSS.
Ligne 7 : on instancie notre application Vue.js avec le composant App (importé ligne 2)
Ligne 9 : on associe à notre application "app", le router, ce qui nous permettra de l'utiliser partout.
Ligne 11 : Cette ligne vient "injecter" notre application vue, dans la page html (index.html), et très exaxctement dans la balise avec l'id "app"
Vue utilise une syntaxe de template basée sur HTML pour permettre de lier de manière déclarative le DOM rendu aux données de l'instance du composant sous-jacent. Tous les templates Vue sont du HTML syntaxiquement valide qui peut être analysé par des navigateurs et des analyseurs HTML conformes aux spécifications. A titre de comparaison ReactJs utilise du JSX pour décrire la partie HTML.
La forme la plus élémentaire de liaison de données est l'interpolation de texte à l'aide de la syntaxe "Moustache" (doubles accolades) :
Dans cet exemple msg
est une variable dont le contenu doit être défini dans votre code Vue.js.
Si vous souhaitez passer une variable dans une balise HTML (ou un composant Vue.js), ou dans un attribut, vous ne pouvez pas utiliser la syntaxe "moustache" avec les accolades. Vous devez passer par l'instruction v-bind
, exemple :
Dans cet exemple idDynamique
est donc la variable qui alimentera l'attribut id de la balise div.
Il existe une syntaxe "courte" qui peut s'écrire sans le v-bind
comme ci-dessous :
Si vous avez un objet JavaScript représentant plusieurs attributs qui ressemble à ceci :
Vous pouvez les lier à un seul élément en utilisant v-bind
sans argument :
Cette syntaxe va faire apparaître les deux attributs id et class dans votre objet. Le v-bind
est ici obligatoire, il n'y a pas de syntaxe courte.
Les variables entre accolades peuvent être manipulées comme toutes les variables, comme dans les exemples ci-dessous.
Si vous souhaitez construire un mot contenant du texte et une variable, vous pouvez utiliser la syntaxe ci-dessous :
${id}
est la variable id
dans la notation particulière dans le contexte d'une concaténation avec du texte et avec l'usage des ``
Coté JavaScript, la déclaration des variables se fait de manière conventionnelle avec des constants, ou des variables (let), des variables simples (textes, nombres, float, ...) ou des tableaux, des objets json.
Installation de Vue.js
Modifiez le composant App.vue pour ajouter des variables : un titre et un paragraphe de texte
Créer un deuxième composant. Comment l'ajouteriez vous dans le composant App.vue ?
Ajoutez 3 variables (note1, note2 et note3) et affichez ces 3 notes et la moyenne.
Ajoutez une variable de type tableau contenant une liste de mot. Affichez cette liste.
Le calcul de la moyenne de l'exercice précédent est pratique, mais si on souhaite l'utiliser à plusieurs endroits il faudra refaire le calcul. Par ailleurs, on pourrait exploiter une boucle en JavaScript, ou manipuler des variables qui se composent elles mêmes de plusieurs autres variables. Tout cela est possible avec Vue.js, en utilisant des propriétés calculées, dites computed
.
La syntaxe d'une propriété calculée est la suivante (dans la partie script) :
Une propriété calculée est une constante, avec un nom, l'instruction computed
, puis une fonction anonyme en JavaScript.
Pour fonctionner ce code nécessite d'importer l'instruction computed qui est native dans Vue.js avec la ligne ci-dessous :
Le code complet serait donc :
L'utilisation dans la partie template se fait en considérant moyenne comme une variable classique. On peut donc l'utiliser pour un affichage avec {{ moyenne }}
ou dans des tests ou boucles, ou d'autres opérations.
Cela ne concerne que l'approche par "composition" de Vue.js 3. La source de cette partie est la traduction de la documentation ici : https://vuejs.org/guide/essentials/reactivity-fundamentals.html