Vuejs
Vuejs
COLLEGE OF COMPUTING
Encapsule la logique (JavaScript), le modèle (HTML) et les styles (CSS) du composant dans un seul
fichier
Les composant Vue peuvent être créées avec deux styles d’API
Options API
Composition API
§ NPM
§ VUE-CLI
Html file
§Dans le fichier HTML on définit un div avec un id pour définir ou notre application sera montée et ce que
vue pourra contrôler
§methods est un objet qui contient les fonctions. Ces fonctions ont accès aux variables réactives des données en utilisant le format
this.variableName.
§component est un objet où chaque champ fournit un nom pour le modèle et la valeur pointe vers le constructeur d'un autre composant
(enfant de celui actuel).
§Computed est un objet dont les attributs définissent des propriétés « calculées ». Chaque membre est alors une fonction ou un objet
qui peut être utilisé comme variables réactives dans notre modèle et notre code. Les fonctions seront en lecture seule et les objets
pourraient inclure une logique pour y lire et y écrire des valeurs.
§props et emit déclarent des paramètres pour recevoir des données du composant parent et déclarer des événements qui sont distribués
au composant parent. Cela fournit un moyen formel de communiquer et transmettre des données entre les composants associés
§Les méthodes de hooks de cycle de vie sont une série de fonctions qui sont déclenchées pendant le cycle de vie du composant.
3. Dans le fichier HTML ajouter une div qui sera contrôler par Vue
4. Créez un fichier JS et y mettre le code pour créer une instance Vue et monter le avec la div créée
§Une directive est déclarée dans la balise d'ouverture d'un élément HTML et affectera ou
fournira un comportement ou une fonctionnalité dynamique à cet élément.
§v-bind
§v-show
§v-for et :key
§v-model
§v-on
§Si la variable est réactive, chaque fois qu'elle met à jour sa valeur, elle sera reflétée dans le
html.
§Si la variable n'est pas réactive, il ne sera utilisé qu'une seule fois lors du rendu initial du
HTML.
§Exemple :
§ <img :src="link_to_profile_picture">
§ <img v-bind:src="link_to_profile_picture">
Créez un nouveau dossier dans votre projet qui va contenir des images
Ajoutez une propriété image ayant comme valeur le lien vers une image
Elle prend comme variable qui donne une valeur booléenne (qui peut être interprété comme
vrai ou non vide).
<div v-show="loading">…</div>
Il est important de garder à l'esprit que v-show utilise le style de l'objet pour l'afficher
et que l'élément fera toujours partie du DOM
Lors de l’affichage, afficher le book dans une div ayant comme attribut v-show
Inspecter encore une fois le code source de la page et décrire le comportement de v-show
v-if est utilisée pour restituer conditionnellement un bloc. Le bloc ne sera rendu que si
l'expression de la directive renvoie une valeur véridique
La directive v-else peut être utilisée pour indiquer un "bloc else" pour v-if
La directive v-for peut être utilisée pour afficher une liste d'éléments basée sur un tableau.
Nécessite une syntaxe spéciale sous la forme d'élément dans éléments,
◦ où éléments est le tableau de données source
◦ et élément est un alias pour l'élément du tableau sur lequel l'itération est effectuée
v-for supporte également un second et optionnel alias pour l'index de l'item actuel :
v-for supporte également un second et optionnel alias pour l'index de l'item actuel :
v-for peut être utilisée aussi pour itérer sur les propriétés d'un objet.
L'ordre d'itération sera basé sur le résultat de l'appel à Object.keys() sur l'objet
En se basant sur les données du fichier 2-books.json, afficher les informations de chaque
book sous la forme :
En se basant sur les données du fichiers 2-books.json, afficher juste les books qui sont favoris
Utilisée par v-for pour identifier les éléments du tableau et les mettre à jour correctement
lorsque le tableau et modifié
Si :key n’est pas utilisée v-for utilisera l’index de l’élément comme clef
◦ Peut entraîner des problèmes de màj et vue ne pourra pas faire une distinction entre les éléments du tableau si
un élément est modifié
:key est un attribut spécial qui est lié avec v-bind. Il ne doit pas être confondu avec la
variable de clé de propriété utilisée dans le cas d'un v-for avec un objet.
Afficher une liste HTML contenant les différents books ainsi que les différentes
informations.
§Chaque membre est une fonction ou un objet qui peut être utilisé comme variables
réactives dans le modèle du code.
§Les fonctions seront en lecture seule et les objets pourront inclure une logique pour y lire
et y écrire des valeurs.
§Tant que book.isFav n'a pas changé, les accès multiples vont immédiatement retourner le
résultat calculé précédent sans avoir à réexécuter la fonction accesseur
§La valeur retournée par une propriété calculée est un état dérivé.
§Similaire à un snapshot temporaire - chaque fois que l'état de base change, un nouveau
snapshot est créé.
§Il n'est pas logique de modifier un snapshot, donc une valeur calculée retournée ne
devrait être traitée qu'en lecture seule et ne pas être modifiée - à la place, modifiez
l'état de base dont elle dépend afin d'engendrer de nouveaux calculs.
§Permet de donner une class de manière conditionnelle, en se basant sur une certaine
condition.
§Exemple pour chaque livre, nous pourrions lui attribuer conditionnellement une classe
basée sur sur la valeur d’une propriété dans chaque livre (isFav).
§Ceci va permettre d’appliquer un style différent pour les books qui sont favoris
§Utilisation de v-bind
§Pour chaque clef/valeur, la clef sera évaluée si elle retourne vraie, le style va s’appliquer
§Ajouter une class pour les livres favoris et y appliquer le style du fichier dynamic-class.css
§La directive v-bind:class (ou :class) peut co-exister avec l’attribut simple class
§Un tableau de class peut être utilisé pour appliquer plusieurs styles
§Les événements sont des actions ou des occurrences qui se produisent dans le système que
vous programmez et dont le système vous informe
En JavaScript, un évènement est une action qui se produit et qui possède deux
caractéristiques essentielles :
• C’est une action qu’on peut « écouter », c’est-à-dire une action qu’on peut détecter car le système
va nous informer qu’elle se produit ;
• C’est une action à laquelle on peut « répondre », c’est-à-dire qu’on va pouvoir attacher un code à
cette action qui va s’exécuter dès qu’elle va se produire.
§La gestion des events dans Vue est similaire que dans JS
§Elle n’attend pas une variable, mais une fonction ou une expression, et lie un événement
HTML à une fonction JavaScript pour l'exécuter.
§L'événement doit être déclaré immédiatement après les deux points. Par exemple, pour
réagir à un événement de clic sur un bouton :
§ <button v-on:click="printPage()">Print</button>
§ <button @click="printPage()">Print</button>
§Le handler est la fonction qui va être appelée pour gérer l’event
§ Méthode;
§Le handler Inline : Du JavaScript inline qui sera exécuté lorsque l'événement sera
déclenché, il est généralement utilisé dans les cas simples
§Au cas où la méthode reçoit d’autre params, l’accès à l’argument du gestionnaire doit se
faire explicitement, en dernier argument, en passant l’objet $event
§Ajouter une propriété globale showBook et lui affecter la valeur true par défaut.
§Ajouter un event au li de chaque book, si l’utilisateur clic sur le book ajouter le au favoris
(isFav doit avoir la valeur true)
§ @keyup.enter=’’ handler’’
Vue fournit des alias pour les touches les plus couramment utilisées :
• .enter
• .tab
• .delete (capture à la fois les touches "Delete" et "Backspace")
• .esc
• .space
• .up
• .down
• .left
• .right
◦ .alt
◦ .shift
◦ .meta (Sur les claviers Mac, meta est la touche commande (⌘). Sur les claviers Windows, meta est
la touche Windows (⊞))
Exemple :
Lorsqu'elles sont utilisées avec des événements keyup, elles doivent être appuyées lorsque
l'événement est émis.
Exemple : keyup.ctrl ne se déclenchera que si vous relâchez une touche tout en maintenant
la touche ctrl enfoncée. Il ne se déclenchera pas si vous relâchez la touche ctrl seulement.
§Discutez le résultat
§Les valeurs prises en comptes sont celle déclarée dans l’option data côté Javascript
§Utilisation de v-bind
§ Des champs radio permettant à l’utilisateur de choisir permis les skills proposés
§ Un champ de type input pour que l’utilisateur ajoute d’autres skills s’ils ne sont pas proposés
§Le champs input permettra à l’utilisateur de saisir le skill et sera validé par un appuie sur
la touche espace, une fois fais, le skill devra être ajouté au tableau des skills (attention au
doublons)
§Pour la liste des skills, ajouter un click event, permettant de supprimer un skill de la liste
§Une fois le formulaire soumis, afficher les informations saisies par l’utilisateur
§ Détruite
§Prérequis :
§ Node.js installed (utilisation du npm)
§ref et l'objet $refs sont utilisés dans Vue comme alternative aux méthodes JavaScript simple comme
getElementById() ou querySelector()
§ Changement de class
§ Lire la valeur
§ ….
§Si les éléments HTML créés avec v-for ont l'attribut ref, les éléments DOM résultants seront ajoutés
à l'objet $refs sous forme de tableau
Content.vue Comments.vue
1. Enregistrement globale
2. Enregistrement locale
1. Importation du composant
app.component('MyComponent', MyComponent)
L'enregistrement global présente quelques inconvénients :
◦ Si vous enregistrez globalement un composant mais que vous ne l'utilisez nulle part dans votre application, il
sera toujours inclus dans le bundle final.
Il rend les relations entre dépendances moins explicites dans les applications de taille importante.
Cela rend difficile la localisation de l'implémentation d'un composant enfant à partir d'un composant
parent qui l'utilise. Cela peut affecter la maintenabilité à long terme, de la même manière que si vous
utilisiez trop de variables globales
La transmission des données aux composants se fait à l’aide de l’élément props via des attributs
personnalisés à la balise du composant.
Dans le composant enfant, on déclare le tableau props et y met les props qui seront transmises
Le kebab-case n'est pas légal en JavaScript. Dans le tableau des props on écrit plutôt les noms
d'attributs sous la forme camelCase, et Vue comprend cela automatiquement !
Pour pouvoir passer des props dynamique on utilisera le v-bind avec une variable du model
Pour le typage des données on utilisera le v-bind lors du passage des données
L’utilisation de v-bind indique à JS qu’il s’agit d’une expression plutôt que d’une chaine de caractères
◦ Le composant enfant doit être configuré pour recevoir les props correspondante et non pas l’objet lui
même
Si une exigence n'est pas remplie, Vue vous avertira dans la console JavaScript du
navigateur.
Si une props requise n'est pas définie, on aura un avertissement dans la console
Si une props requise n'est pas définie, on aura un avertissement dans la console
Si la props parent est màj, elle descendra vers le composant enfant mais pas l’inverse
$emit() est utilisé pour faire l'inverse : transmettre des informations du composant enfant
au parent.
Avec la méthode $emit() intégrée dans Vue, nous pouvons créer un événement
personnalisé dans le composant enfant qui peut être capturé dans l'élément parent.
La balise <slot> agit comme un espace réservé pour le contenu, de sorte qu'une fois
l'application créée, le <slot> sera remplacé par le contenu qui lui est envoyé.
Composant Enfant
Le slot nommé permet de spécifier un nom pour un slot particulier, ce qui permet de gérer
plusieurs emplacements de contenu dans un composant de manière plus structurée
Nous avons besoin de la directive v-slot (raccourcis #) pour faire référence aux
emplacements nommés.
Pour déplacer du contenu ailleurs dans la structure DOM, nous utilisons la balise Vue
<Teleport> autour du contenu et l'attribut 'to' pour définir où le déplacer.
§Dans une SPA le JS côté client peut intercepter la navigation, récupérer dynamiquement de nouvelles
données, et mettre à jour la page actuelle sans la recharger entièrement :
§ Expérience utilisateur plus rapide
Son rôle principal est de servir de point d'entrée pour les composants associés aux routes définies
dans l'application.
Lorsqu'un utilisateur navigue vers une URL correspondant à une route définie dans l'application,
Vue Router intercepte cette navigation et recherche le composant associé à cette route. Le contenu
de ce composant est ensuite rendu à l'intérieur de router-view.
Il est similaire à la balise <a> en HTML, mais est optimisé pour une utilisation avec Vue Router.
replace : Si défini sur true, la navigation remplacera l’entrée actuelle dans la pile d’historique au lieu d’en ajouter une nouvelle.
append : Si mis à true, le chemin de la route courante sera ajouté à la valeur de la propriété to. Ceci est utile lorsque vous souhaitez créer des
liens de navigation relatifs.
tag : Spécifie la balise HTML à utiliser pour le rendu du lien. Par défaut, il est rendu en tant que balise <a>, mais vous pouvez le modifier en
d’autres balises HTML comme <button> si nécessaire.
active-class : Spécifie la classe à appliquer au lien lorsque sa route cible est active.
exact : Lorsqu’il est défini sur true, le lien ne sera actif que si le chemin correspond exactement à la propriété to. Ceci est utile pour la
correspondance exacte des routes.
event : Spécifie l’événement ou les événements pour déclencher la navigation. Par défaut, il est défini sur "clic", mais vous pouvez le
personnaliser si nécessaire.
exact-active-class : Spécifie la classe à appliquer au lien lorsque sa route cible est exactement active
Dans Vue Router, nous pouvons utiliser un segment dynamique dans le chemin pour y parvenir, nous
appelons cela un param :
Lorsqu’une route est appariée, la valeur de ses params sera exposée comme route.params dans chaque
composant.
Par conséquent, nous pouvons rendre l’ID utilisateur actuel en mettant à jour le modèle de l’utilisateur
de la façon suivante :
En plus de route.params, l’objet route expose également d’autres informations utiles telles que
route.query (s’il y a une requête dans l’URL), route.hash, etc
Permet d’attraper n’importe quelle route qui n’est pas définit dans le tableau des routes
Permet d’ajouter une nouvelle entrée dans la pile de l’historique de navigation. Ainsi quand un
utilisateur clique sur le bouton retour de son navigateur, il retournera à l'URL précédent.
La méthode router.go(n) indique de combien d'entrées vers l'avant ou vers l'arrière il faut naviguer dans
la pile de l'historique
§ API de réactivité :
§ Injection de dépendances :
§ API de réactivité :
§ Injection de dépendances :
§Elle prend l’argument et le renvoi enveloppé dans un objet ref avec la propriété .value
Importation du ref
Parent Child
§Il offre une base de données en temps réel, différentes API, plusieurs types d’authentification et une
plateforme d’hébergement.