Pré-requis :
- Avoir suivi le mini-cours sur JavaScript
- Avoir des notions de base en matière de programmation orientée objet (rappelées ci-dessous)
Introduction
VueJS permet d'utiliser des composants réutilisables pour la création d'interface d'applications web. Ce frameworks créé en 2014, est une version plus légère et améliorée d'AngularJS.
VueJS est un framework. Sa version 2.6.12 se décline en deux versions :
- en mode développement : vue.js = 363 Ko
- en mode production : vue.min.js = 92 Ko
Explication des différents builds
Comparatif avec d'autres frameworks
React
- Plus populaire. Mais, demande un temps d'apprentissage plus long.
- Tous ses composants expriment leur UI à travers des fonctions de rendu utilisant JSX
AngularJS (Angular 1)
-
Une partie de la syntaxe de Vue ressemble très fortement à celle de AngularJS (ex : v-if vs ng-if). Cela est dû au fait qu'il y a beaucoup de choses pour lesquelles AngularJS a vu juste et que cela a été une source d'inspiration pour Vue très tôt dans son développement. Cependant, AngularJS vient également avec de nombreux soucis. C'est là que Vue a tenté d'apporter une amélioration significative.
-
Vue est bien plus simple que AngularJS, autant en termes d'API que d'architecture.
- angular.min.js (version 1.8.2) pèse 174 Ko, soit quasi deux fois plus lourd que vue.min.js
-
Vue fait une distinction plus claire entre directives et composants. Les directives sont conçues pour encapsuler uniquement des manipulations du DOM, tandis que les composants sont des unités indépendantes ayant leur propre vue et logique de données.
-
Vue a de meilleures performances
- En résumé, Vue c'est de l'AngularJS amélioré (au niveau de la performance, de l'architecture et du temps d'apprentissage).
Les directives (= les nouveaux attributs des balises HTML) rendent le fichier HTML non conforme aux règles de la W3C ! Toutefois, une application web n'étant pas une page web, on peut considérer que ces règles ne sont pas de stricte application.
Angular (Angular 2)
AngularJS est quasi abandonné au profit d'Angular.
-
Angular demande essentiellement l'utilisation de TypeScript
- Plus difficile à apprendre
React et Angular sont les deux seuls "vrais" rivaux de VueJS.
Comparatif des téléchargements entre React, Vue et Angular
Début du cours
Rappel : Notions de base
Vue est une class. (Le nom d'une class débute par une
majuscule.)
L'opérateur new crée un objet de cette class.
/* création d'un objet */ new Classe(); /* création d'un objet, puis affection de l'objet créé à une variable */ var myObject = new Classe();
La valeur de la variable myObject est un objet.
Il n'est pas obligatoire d'affecter une variable lors de la création d'un objet de type Vue. Mais, cette affection permet alors d'appeler cette variable dans la console et de modifier le comportement de l'application en temps réel. Ce qui peut être utile dans la phase de débogage de l'application web.
Une class peut contenir une ou plusieurs méthodes particulières, appelées "constructeur". Le paramètre d'un constructeur peut être un objet JS.
Un objet JS peut s'écrire, comme ici, sous la forme {couple1,
couple2, ...}
couple1
peut s'écrire : key: value
value
peut être de type :
- String : avec guillemets ou apostrophes : 'Hello Vue !'
- Number : avec des chiffres avec (ou sans) un point décimal : 3.1415926535
- Boolean : avec des mots clé : false | true
- Object : entre accolades. Plusieurs couples sont séparés par une virgule : {couple1, couple2, ...}
-
Array : entre crochets avec zéro, un ou plusieurs éléments séparés par une
virgule
où élement peut être une String, un Number, un Boolean, un Object ou un Array
el:
Le constructeur de la class Vue reçoit un objet qui contient, au moins, un couple dont la clé est nommée el. La valeur de cette clé est la valeur de l'attribut id d'une balise HTML, précédée du caractère #. Cette balise délimite la zone de l'application.
Code HTML
<div id="app1"> 1 + 1 = {{ 1 + 1 }} </div>
Code JS
var app1 = new Vue({ el: '#app1' });
Une page web peut contenir plusieurs applications : app1, app1b, ...
{{ mustache }}
La forme la plus courante de la liaison de données est l'interpolation en utilisant la syntaxe "Mustache" (les doubles accolades). Le contenu de la balise mustache est évalué; puis, cette balise est remplacée par le résultat de cette évaluation.
Code HTML
<div id="app1b"> 2 + 2 = {{ 2 + 2 }} = {{2+2}} </div>
Code JS
new Vue({ el: '#app1b' });
Une expression est tout ce qui peut être évalué par JS.
{{ number + 1 }} {{ ok ? 'OUI' : 'NON' }} {{ message.split('').reverse().join('') }}
L'espace qui suit {{ et celui qui précède }} permet d'avoir un code plus lisible. Les espaces entre les {{ }} n'influencent pas l'affichage.
Les moustaches ne peuvent pas être utilisées à l'intérieur des attributs HTML. À la place utilisez une directive v-bind.
Voir : Expressions et opérateurs
data:
Le constructeur de la class Vue reçoit un objet qui peut contenir un couple dont la clé est nommée data. La valeur de cette clé est un objet JS. Cet objet JS contient toutes les propriétés de l'application ou du composant (devant être initialisées) sous la forme de couples (clé:valeur).
Il est préférable de parler de propriétés même si elles sont comme des
variables, car ces data caractérisent l'application, contrairement à la variable
i
dans une boucle.
Ces propriétés sont aussi appelées, dans le cadre de Vue, dépendances réactives, car la modification de l'une d'elles déclenche une réaction (= une mise à jour du rendu).
Le rendu est le code HTML généré (dans la mémoire du navigateur) par le code JS utilisé dans le framework Vue.js
La balise mustache sera remplacée par la valeur de la propriété message de l'objet data correspondant.
Code HTML
<div id="app1c"> {{ message }} </div>
Code JS
var app1c = new Vue({ el: '#app1c', data: { message: 'Hello Vue !' } }); app1c.message="Bonjour, Thibaut !";
/* création d'un objet de type Vue, puis affection de l'objet créé à une variable */ var app1c = new Vue({...});
Une variable peut être affectée avec un objet, afin de pouvoir modifier les valeurs de cet objet ultérieurement. Comme ci-dessous :
app1.message="Bonjour, Thibaut !";
Ici, la variable message a été initialisée (dans le constructeur) avec la valeur : 'Hello Vue !'. Puis, elle a été réaffectée avec la valeur : "Bonjour, Thibaut !". Au final, c'est donc "Bonjour, Thibaut !" qui s'affiche.
computed:
Le constructeur de la class Vue reçoit un objet qui peut contenir un couple dont la clé est nommée computed. La valeur de cette clé est un objet JS. Cet objet JS contient toutes les propriétés calculées. Le nom d'une propriété calculée est le nom d'une fonction qui retourne une valeur. Une propriété calculée contient toute une logique complexe qui produit un résultat.
Code HTML
<div id="app1d"> {{ a }} + {{ b }} = {{ total }} </div>
Code JS
new Vue({ el: '#app1d', data: { a: 3, b: 4 }, computed: { total(){ return this.a + this.b } } });
this indique l'objet Vue lui-même. Ici, cet objet a une propriété a
dont la valeur vaut 3
.
total(){...}
= total: function(){...}
les propriétés déclarées dans la clé computed
sont mises en cache selon
leurs dépendances à une propriété déclarée dans la clé data
. Une propriété
calculée sera réévaluée uniquement quand l'une de ses dépendances aura changé,
contrairement aux propriétés qui peuvent être modifiée dans les méthodes déclarées dans
la methods
.
Généralement, les propriétés calculées sont utilisées comme un getter. Toutefois,
il est possible d'utiliser aussi un setter. Dans le getter a comme nom de clé
get
et le setter a comme nom de clé set
computed: { fullName: { get: function () { return this.firstName + ' ' + this.lastName }, set: function (newValue) { var names = newValue.split(' ') this.firstName = names[0] this.lastName = names[names.length - 1] } } }
Le setter mettra alors à jour les dépendances réactives (= propriétés de l'application ou du composant) à jour
methods:
Le constructeur de la class Vue reçoit un objet qui peut contenir un couple dont la clé est nommée methods. La valeur de cette clé est un objet JS. Cet objet JS contient toutes les méthodes de l'application.
La syntaxe sera affichée lorsque la directive v-on
sera abordée.
watch:
Dans certains cas, il est utile d'observer une propriété réactive.
Syntaxe :
watch: { mydata: function (newValue, oldValue) { /* ... */ } }
Le premier paramètre (d'un nom quelconque) de cette fonction contiendra la nouvelle valeur de la propriété réactive. Le second paramètre, ayant également un nom quelconque, contient l'ancienne valeur de cette propriété réactive.
Liens
- vue.js (FR)
- sur wikipedia
- Tutoriel de Maurice CHAVELLI
- Résumé du JS par Maurice CHAVELLI
- OpenClassRooms (FR)
- javabeginnerstutorial (EN)
Dossier des fichiers liés au livre : H:\2021\www\sitesHTML\incels\cours\LeWeb\vueJS\eyrolles