â Vue.js AnfĂ€nger Lektion 1: Instanz Vue
â Vue.js fĂŒr AnfĂ€nger, Lektion 2: Bindungsattribute
â Vue.js AnfĂ€nger Lektion 3: Bedingtes Rendern
â Vue.js AnfĂ€nger Lektion 4: Listen rendern
â Vue .js fĂŒr AnfĂ€nger Lektion 5: Ereignisverarbeitung
â Vue.js AnfĂ€nger Lektion 6: Binden von Klassen und Stilen
â Vue.js AnfĂ€nger Lektion 7: berechnete Eigenschaften
â Vue.js AnfĂ€nger Lektion 8: Komponenten
Der Zweck der Lektion
Das erste Ziel der Lektion ist es, eine SchaltflÀche auf der Produktkarte zu haben, durch die die Anzahl der Produkte im Warenkorb erhöht wird.
Das zweite Ziel besteht darin, das Produktbild zu Ă€ndern, wenn Sie mit der Maus ĂŒber die Farbnamen der Produktvarianten fahren.
Anfangscode
Die Projektdatei
index.html
enthÀlt den folgenden Code:
<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>
Hier ist der Inhalt
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"
}
]
}
})
Aufgabe
Wir benötigen eine SchaltflÀche, um einen Ereignis-Listener zuzuweisen, wenn darauf geklickt wird. Beim Klicken sollte eine Methode gestartet werden, mit der die Anzahl der Artikel im Warenkorb erhöht wird.
Entscheidung
FĂŒgen Sie dem
main.js
Objekt zunÀchst data
eine neue Eigenschaft hinzu, die die Anzahl der Artikel im Warenkorb symbolisiert:
cart: 0
FĂŒgen
index.html
Sie nun ein Element hinzu <div>
, das den Warenkorb beschreibt. Dieses Element verwendet ein Tag, <p>
mit dem die in der Eigenschaft gespeicherte Nummer auf der Seite angezeigt wird cart
:
<div class="cart">
<p>Cart({{ cart }})</p>
</div>
Wir werden auch eine
index.html
SchaltflÀche im Code erstellen , mit der Sie ein Produkt in den Warenkorb legen können:
<button v-on:click="cart += 1">Add to cart</button>
Beachten Sie hier,
cart
dass wir die Direktive verwenden, um den in gespeicherten Wert zu erhöhen v-on
.
Eine Seite mit einem Warenkorb und einer SchaltflĂ€che zum HinzufĂŒgen eines Artikels zum Warenkorb
Wenn Sie jetzt auf die SchaltflÀche klicken, erhöht sich die Anzahl der Artikel im Warenkorb um 1.
Wie funktioniert das alles?
Werfen wir einen Blick auf die hier vorgestellte Konstruktion. Die Verwendung einer Direktive
v-on
teilt Vue mit, dass wir auf Ereignisse auf der SchaltflÀche warten möchten. Dann kommt ein Doppelpunkt, nach dem das spezifische Ereignis angezeigt wird, an dem wir interessiert sind. In diesem Fall handelt es sich um ein Ereignisclick
. Die AnfĂŒhrungszeichen enthalten einen Ausdruck, der dem in gespeicherten Wert 1 hinzufĂŒgtcart
. Dies geschieht jedes Mal, wenn auf die SchaltflÀche geklickt wird.
Dies ist ein einfaches, aber nicht ganz realistisches Beispiel. Anstatt den Ausdruck einzuschlieĂen
cart += 1
Machen wir es so, dass durch Klicken auf die SchaltflÀche eine Methode aufgerufen wird, die den in gespeicherten Wert erhöht cart
. So sieht es aus:
<button v-on:click="addToCart">Add to cart</button>
Wie Sie sehen können, ist hier
addToCart
der Name der Methode, die aufgerufen wird, wenn das Ereignis eintritt click
. Wir haben die Methode selbst noch nicht deklariert. Lassen Sie uns dies jetzt tun, indem Sie unsere Vue-Instanz damit ausstatten.
Es verwendet einen Mechanismus, der dem sehr Ă€hnlich ist, den wir bereits zum Speichern von Daten verwenden. Wir sprechen nĂ€mlich ĂŒber die Tatsache, dass das Objekt mit Optionen, die beim Erstellen einer Instanz von Vue verwendet werden, möglicherweise eine optionale Eigenschaft hat, nach
methods
der das Objekt mit Methoden benannt ist. In unserem Fall ist es nur eine Methode addToCart
:
methods: {
addToCart() {
this.cart += 1
}
}
Wenn wir nun auf die SchaltflÀche klicken, wird die Methode aufgerufen
addToCart
, wodurch der cart
im Tag angezeigte Wert erhöht wird <p>
.
Fahren wir mit der Analyse fort, was hier passiert.
Die SchaltflÀche wartet
click
dank der Anweisung v-on
, die die Methode aufruft, auf Ereignisse addToCart
. Diese Methode befindet sich in der Eigenschaft der methods
Vue-Instanz. Der Funktionskörper enthĂ€lt eine Anweisung, die dem Wert 1 hinzufĂŒgt this.cart
. Da this
ein Verweis darauf gespeichert ist, wo die Daten der Vue-Instanz gespeichert sind, in der wir uns befinden, addiert die Funktion 1 zum Wert cart
. A this.cart
ist dasselbe wie eine Eigenschaft cart
, die in einer Eigenschaft eines data
Objekts mit Optionen deklariert ist .
Wenn wir nur in den Körper der Funktion so etwas geschrieben haben
cart += 1
dann wĂ€ren wir auf eine Fehlermeldung gestoĂen cart is not defined
. Aus diesem Grund verwenden wir Konstrukt this.cart
und Zugriff cart
von einer Vue-Instanz mit this
.
Vielleicht wundern Sie sich jetzt, dass wir jetzt einfach die Anzahl der Artikel im Warenkorb erhöhen, aber den Artikel selbst nicht in den Warenkorb legen. Vielleicht machen wir etwas falsch? Das ist die richtige Frage. Wir werden diese FunktionalitÀt spÀter in einem der folgenden Tutorials implementieren.
Nachdem wir nun die Grundlagen der Ereignisbehandlung in Vue gelernt haben, schauen wir uns ein komplexeres Beispiel an.
Erweitern wir zunÀchst die Array-Objekte
variants
aus dem Objekt, data
indem wir dort eine Eigenschaft hinzufĂŒgen variantImage
, in der der Pfad zum Bild der gewĂŒnschten Produktvariante gespeichert ist. Geben wir den entsprechenden Abschnitt der Datei anmain.js
zu dieser Form:
variants: [
{
variantId: 2234,
variantColor: "green",
variantImage: "./assets/vmSocks-green.jpg"
},
{
variantId: 2235,
variantColor: "blue",
variantImage: "./assets/vmSocks-blue.jpg"
}
],
Jetzt hat jede Produktvariante, grĂŒne und blaue Socken, ein eigenes Bild.
Aufgabe
Wenn Sie mit der Maus ĂŒber den Namen der Farbe der Sockenvariante fahren, muss in dem Feld, in dem das Bild des Produkts angezeigt wird, das Bild
variantImage
fĂŒr die entsprechende Farbe angezeigt werden .
Entscheidung
Hier bietet sich die Richtlinie wieder an
v-on
. Aber dieses Mal werden wir eine abgekĂŒrzte Version der Notation verwenden, die so aussieht @
. Und wir werden uns die Veranstaltung anhören mouseover
.
Hier ist der relevante Code in
index.html
:
<div v-for="variant in variants" :key="variant.variantId">
<p @mouseover="updateProduct(variant.variantImage)">
{{ variant.variantColor }}
</p>
</div>
Beachten Sie, dass wir die Methode
updateProduct
in Form eines Arguments ĂŒbergeben variant.variantImage
.
Erstellen wir diese Methode in
main.js
:
updateProduct(variantImage) {
this.image = variantImage
}
Diese Methode ist der kĂŒrzlich erstellten sehr Ă€hnlich, um den Wert zu erhöhen
cart
.
Aber hier aktualisieren wir den in gespeicherten Wert
image
. Es image
wird nÀmlich aufgezeichnet, was in variantImage
der Variante des Produkts gespeichert ist, auf dem sich der Mauszeiger befindet. Der entsprechende Wert wird updateProduct
vom Ereignishandler selbst an die Funktion ĂŒbergeben. Er befindet sich in index.html
:
<p @mouseover="updateProduct(variant.variantImage)">
Mit anderen Worten, die Methode kann jetzt
updateProduct
mit einem Parameter variantImage
aufgerufen werden .
Wenn diese Methode aufgerufen wird, wird
variant.variantImage
sie als Ansicht an sie ĂŒbergeben variantImage
und zum Aktualisieren des in gespeicherten Werts verwendet this.image
. In Analogie zu der zuvor betrachteten Konstruktion this.cart
können wir sagen, dass this.image
- dasselbe ist wie image
. Infolgedessen wird der in gespeicherte Wert image
jetzt dynamisch entsprechend den Daten der Artikelvariante aktualisiert, ĂŒber die der Mauszeiger bewegt wird.
ES6-Syntax
Hier haben wir beim Erstellen von Methoden die folgenden Konstruktionen verwendet:
updateProduct(variantImage) {
this.image = variantImage
}
Dies ist eine abgekĂŒrzte Version der Methodenbeschreibung, die in ES6 angezeigt wurde. Eine Ă€ltere Version des Schreibens solcher Konstruktionen sieht folgendermaĂen aus:
updateProduct: function(variantImage) {
this.image = variantImage
}
Werkstatt
Erstellen Sie eine SchaltflÀche und eine entsprechende Methode, um den in gespeicherten Wert zu verringern
cart
.
â Hier ist eine Vorlage, mit der Sie dieses Problem lösen können.
â Hier ist die Lösung des Problems.
Ergebnis
Lassen Sie uns die Ergebnisse der heutigen Lektion zusammenfassen:
- Die Direktive wird verwendet, um die Reaktion eines Elements auf Ereignisse zu organisieren
v-on
. - Eine abgekĂŒrzte Version der Richtlinie
v-on
sieht so aus@
. - Bei Verwendung können
v-on
Sie den Ereignistyp angeben , den Sie abhören möchten:
- klicken
- Mouseover
- jedes DOM-Ereignis
- Die Direktive
v-on
kann Methoden aufrufen. - Die mit aufgerufene Methode
v-on
kann Argumente annehmen. -
this
, Vue. , , .
Hast du deine Hausaufgaben fĂŒr diese Lektion gemacht?
â Vue.js AnfĂ€nger Lektion 1: Instanz Vue
â Vue.js fĂŒr AnfĂ€nger, Lektion 2: Bindungsattribute
â Vue.js AnfĂ€nger Lektion 3: Bedingtes Rendern
â Vue.js AnfĂ€nger Lektion 4: Listen rendern
â Vue .js fĂŒr AnfĂ€nger Lektion 5: Ereignisverarbeitung
â Vue.js AnfĂ€nger Lektion 6: Binden von Klassen und Stilen
â Vue.js AnfĂ€nger Lektion 7: berechnete Eigenschaften
â Vue.js AnfĂ€nger Lektion 8: Komponenten