→ Vue.js débutants leçon 1: instance Vue
→ Vue.js pour les débutants, leçon 2: attributs de liaison
→ Vue.js débutants leçon 3: rendu conditionnel
→ Vue.js débutants leçon 4: rendu des listes
→ Vue .js pour les débutants leçon 5: traitement des événements
→ Vue.js pour débutants leçon 6: liaison de classes et de styles
→ Vue.js pour débutants leçon 7: propriétés calculées
→ Vue.js pour débutants leçon 8: composants
Le but de la leçon
Le premier objectif de la leçon est d'avoir un bouton sur la fiche produit, en cliquant sur celui-ci augmentera le nombre de produits dans le panier.
Le deuxième objectif est de changer l'image du produit lorsque vous passez la souris sur les noms de couleur des variantes de produit.
Code initial
Le fichier projet
index.html
contiendra le code suivant:
<div id="app">
<div class="product">
<div class="product-image">
<img :src="image" />
</div>
<div class="product-info">
<h1>{{ product }}</h1>
<p v-if="inStock">In stock</p>
<p v-else>Out of Stock</p>
<ul>
<li v-for="detail in details">{{ detail }}</li>
</ul>
<div v-for="variant in variants" :key="variant.variantId">
<p>{{ variant.variantColor }}</p>
</div>
</div>
</div>
</div>
Voici le contenu
main.js
:
var app = new Vue({
el: '#app',
data: {
product: "Socks",
image: "./assets/vmSocks-green.jpg",
inStock: true,
details: ['80% cotton', '20% polyester', 'Gender-neutral'],
variants: [
{
variantId: 2234,
variantColor: "green"
},
{
variantId: 2235,
variantColor: "blue"
}
]
}
})
Tâche
Nous avons besoin d'un bouton auquel attribuer un écouteur d'événement lorsque l'utilisateur clique dessus. Au clic, une méthode devrait être lancée qui augmentera le nombre d'articles dans le panier.
DĂ©cision
Pour commencer, ajoutez, Ă l'
main.js
objet data
, une nouvelle propriété qui symbolisera le nombre d'articles dans le panier:
cart: 0
Maintenant, dans
index.html
, ajoutez un élément <div>
qui décrit le panier. Cet élément utilisera une balise <p>
qui affichera le numéro stocké dans la propriété sur la page cart
:
<div class="cart">
<p>Cart({{ cart }})</p>
</div>
Nous allons également créer un
index.html
bouton dans le code qui vous permet d'ajouter un produit au panier:
<button v-on:click="cart += 1">Add to cart</button>
Notez ici
cart
que nous utilisons la directive pour incrémenter la valeur stockée dans v-on
.
Une page avec un panier et un bouton pour ajouter un article au panier
Si vous cliquez sur le bouton maintenant, le nombre d'articles dans le panier augmentera de 1.
Comment ça marche?
Jetons un coup d'œil à la construction présentée ici. L'utilisation d'une directive
v-on
indique à Vue que nous voulons écouter les événements sur le bouton. Puis vient un deux-points, après quoi l'événement spécifique qui nous intéresse est indiqué. Dans ce cas, c'est un événementclick
. Les guillemets contiennent une expression qui ajoute 1 à la valeur stockée danscart
. Cela se produit chaque fois que vous cliquez sur le bouton.
C'est un exemple simple mais pas tout à fait réaliste. Au lieu de renfermer l'expression
cart += 1
, faisons en sorte que cliquer sur le bouton appelle une méthode qui incrémentera la valeur stockée dans cart
. Voici à quoi ça ressemble:
<button v-on:click="addToCart">Add to cart</button>
Comme vous pouvez le voir, voici
addToCart
le nom de la méthode qui sera appelée lorsque l'événement se produira click
. Mais nous n'avons pas encore déclaré la méthode elle-même, alors faisons-le maintenant en équipant notre instance Vue avec elle.
Il utilise un mécanisme très similaire à celui que nous utilisons déjà pour stocker des données. À savoir, nous parlons du fait que l'objet avec les options utilisées lors de la création d'une instance de Vue, peut avoir une propriété facultative nommée après
methods
, qui contient l'objet avec des méthodes. Dans notre cas, ce ne sera qu'une méthode - addToCart
:
methods: {
addToCart() {
this.cart += 1
}
}
Maintenant, lorsque nous cliquons sur le bouton, la méthode est appelée
addToCart
, ce qui augmente la valeur cart
affichée dans la balise <p>
.
Continuons avec l'analyse de ce qui se passe ici.
Le bouton écoute les événements
click
grâce à la directive v-on
qui appelle la méthode addToCart
. Cette méthode est dans la propriété de l' methods
instance Vue. Le corps de la fonction contient une instruction qui ajoute 1 Ă la valeur this.cart
. Puisqu'elle this
stocke une référence à l'endroit où les données de l'instance Vue dans laquelle nous nous trouvons sont stockées, la fonction ajoute 1 à la valeur cart
. A this.cart
est identique à une propriété cart
déclarée dans une propriété d' data
un objet option.
Si nous venons d'Ă©crire dans le corps de la fonction quelque chose comme
cart += 1
alors nous aurions rencontré un message d'erreur cart is not defined
. C'est pourquoi nous utilisons la construction this.cart
et l'accès à cart
partir d'une instance de Vue en utilisant this
.
Vous vous demandez peut-être maintenant que nous augmentons simplement le nombre d'articles dans le panier, mais que nous n'ajoutons pas l'article lui-même au panier. Peut-être que nous faisons quelque chose de mal? C'est la bonne question. Nous implémenterons cette fonctionnalité plus tard dans l'un des didacticiels suivants.
Alors maintenant que nous avons appris les bases de la gestion des événements dans Vue, examinons un exemple plus complexe.
Pour commencer, développons les objets
variants
du tableau Ă partir de l'objet data
en y ajoutant une propriété variantImage
qui stocke le chemin vers l'image de la variante de produit souhaitée. Donnons la section correspondante du fichiermain.js
Ă ce formulaire:
variants: [
{
variantId: 2234,
variantColor: "green",
variantImage: "./assets/vmSocks-green.jpg"
},
{
variantId: 2235,
variantColor: "blue",
variantImage: "./assets/vmSocks-blue.jpg"
}
],
Désormais, chaque variante de produit, chaussettes vertes et bleues, a sa propre image attribuée.
Tâche
Il est nécessaire qu'en passant la souris sur le nom de la couleur de la variante de chaussettes, dans le champ où l'image du produit est affichée, l'image
variantImage
de la couleur correspondante soit affichée .
DĂ©cision
C’est là que la directive est à nouveau utile
v-on
. Mais cette fois, nous utiliserons une version abrégée de sa notation, qui ressemble à @
. Et nous écouterons l'événement mouseover
.
Voici le code pertinent dans
index.html
:
<div v-for="variant in variants" :key="variant.variantId">
<p @mouseover="updateProduct(variant.variantImage)">
{{ variant.variantColor }}
</p>
</div>
Notez que nous passons la méthode
updateProduct
, sous la forme d'un argument variant.variantImage
.
Créons cette méthode dans
main.js
:
updateProduct(variantImage) {
this.image = variantImage
}
Cette méthode est très similaire à celle que nous avons récemment créée pour augmenter la valeur
cart
.
Mais ici, nous mettons à jour la valeur stockée dans
image
. À savoir image
, ce qui est stocké dans variantImage
la variante du produit sur laquelle le pointeur de la souris est survolé est enregistré dans . La valeur correspondante est transmise à la fonction à updateProduct
partir du gestionnaire d'événements lui-même, situé dans index.html
:
<p @mouseover="updateProduct(variant.variantImage)">
En d'autres termes, la méthode
updateProduct
est maintenant prĂŞte Ă ĂŞtre variantImage
appelée avec un paramètre .
Lorsque cette méthode est appelée, elle lui est
variant.variantImage
transmise en tant que vue variantImage
et utilisée pour mettre à jour la valeur stockée dans this.image
. Nous, par analogie avec la construction précédemment considérée this.cart
, nous pouvons dire que this.image
- est le mĂŞme que image
. En conséquence, la valeur stockée dans image
est maintenant mise à jour de manière dynamique en fonction des données de la variante de produit survolée.
Syntaxe ES6
Ici, lors de la création de méthodes, nous avons utilisé les constructions suivantes:
updateProduct(variantImage) {
this.image = variantImage
}
Il s'agit d'une version abrégée de la description de la méthode apparue dans ES6. Une ancienne version de l'écriture de telles constructions ressemble à ceci:
updateProduct: function(variantImage) {
this.image = variantImage
}
Atelier
Créez un bouton et la méthode correspondante qui réduiront la valeur stockée dans
cart
.
→ Voici un modèle que vous pouvez utiliser pour résoudre ce problème.
→ Voici la solution au problème.
RĂ©sultat
Résumons les résultats de la leçon d'aujourd'hui:
- La directive est utilisée pour organiser la réponse d'un élément aux événements
v-on
. - Une version abrégée de la directive
v-on
ressemble Ă@
. - Lorsqu'il est utilisé,
v-on
vous pouvez spécifier le type d'événement à écouter:
- Cliquez sur
- survol
- tout événement DOM
- La directive
v-on
peut appeler des méthodes. - La méthode appelée avec
v-on
peut prendre des arguments. -
this
, Vue. , , .
Avez-vous terminé vos devoirs pour cette leçon?
→ Vue.js débutants leçon 1: instance Vue
→ Vue.js pour les débutants, leçon 2: attributs de liaison
→ Vue.js débutants leçon 3: rendu conditionnel
→ Vue.js débutants leçon 4: rendu des listes
→ Vue .js pour les débutants leçon 5: traitement des événements
→ Vue.js pour débutants leçon 6: liaison de classes et de styles
→ Vue.js pour débutants leçon 7: propriétés calculées
→ Vue.js pour débutants leçon 8: composants