style
und Klassen an die Elemente gebunden werden.
â 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 dieser Lektion ist die Verwendung einer Farbe, die mit Produktvarianten ĂŒbereinstimmt, um die Eigenschaften von
background-color
Elementen anzupassen, die <div>
diese Variationen anzeigen. Da die Produktvarianten den Farben green
und entsprechen blue
, benötigen wir ein Element, <div>
um eine grĂŒne Hintergrundfarbe zu haben, und das andere Blau.
Das zweite Ziel besteht darin, unter bestimmten Bedingungen unnötige Steuerelemente mithilfe der Klassenbindung zu deaktivieren.
Anfangscode
So sieht der aktuelle Code aus
index.html
:
<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 @mouseover="updateProduct(variant.variantImage)">
{{ variant.variantColor }}
</p>
</div>
<button v-on:click="addToCart">Add to cart</button>
<div class="cart">
<p>Cart({{ cart }})</p>
</div>
</div>
</div>
</div>
Hier ist, was jetzt drin ist
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",
variantImage: "./assets/vmSocks-green.jpg"
},
{
variantId: 2235,
variantColor: "blue",
variantImage: "./assets/vmSocks-blue.jpg"
}
],
cart: 0
},
methods: {
addToCart() {
this.cart += 1
},
updateProduct(variantImage) {
this.image = variantImage
}
}
})
Aufgabe
In der vorherigen Lektion haben wir einen Ereignishandler erstellt, der das Produktimage basierend darauf Ă€ndert, ĂŒber welchem ââElement
<p>
der Mauszeiger bewegt wurde. Anstatt den Namen einer Farbe in einem Element anzuzeigen <p>
, möchten wir diese Farbe verwenden, um die Eigenschaft des background-color
entsprechenden Elements festzulegen <div>
. Bei diesem Ansatz können Sie den Mauszeiger nicht ĂŒber die Texte bewegen, sondern ĂŒber die farbigen Quadrate bewegen, wodurch das Produktbild auf der Seite angezeigt wird, dessen Farbe der im Quadrat angezeigten Farbe entspricht.
Entscheidung
FĂŒgen wir zunĂ€chst einem Element eine
<div>
Klasse hinzu color-box
, die seine Breite, Höhe und Ă€uĂere obere Polsterung festlegt. Da wir auch danach weiterhin die <div>
Wörter green
und Elemente anzeigen blue
, können wir die Namen der Farben ĂŒbernehmen, die in den Objekten gespeichert sind, die die Produktvarianten beschreiben, und diese Namen verwenden, wenn wir den Stil an das Attribut binden style
. So sieht es aus:
<div
class="color-box"
v-for="variant in variants"
:key="variant.variantId"
:style="{ backgroundColor:variant.variantColor }"
>
<p @mouseover="updateProduct(variant.variantImage)">
{{ variant.variantColor }}
</p>
</div>
Beachten Sie die zweite und fĂŒnfte Zeile dieses Codes. Hier fĂŒgen wir dem Element eine
<div>
Klasse hinzu color-box
und binden den Inline-Stil daran. Der Inline-Stil wird hier verwendet, um die Eigenschaften der background-color
Elemente dynamisch festzulegen <div>
. Die Hintergrundfarbe der Elemente wird ĂŒbernommen variant.variantColor
.
Darauf
<div>
angezeigte stilisierte Elemente und Beschriftungen Nachdem
das Element mit
<div>
gestaltet wurdevariantColor
, mĂŒssen wir den Namen der darin enthaltenen Farbe nicht mehr anzeigen. Daher können wir das Tag<p>
entfernen und das Konstrukt@mouseover=«updateProduct(variant.variantImage)»
in das Element selbst verschieben<div>
.
So sieht der Code aus, nachdem die obigen Ănderungen vorgenommen wurden:
<div
class="color-box"
v-for="variant in variants"
:key="variant.variantId"
:style="{ backgroundColor:variant.variantColor }"
@mouseover="updateProduct(variant.variantImage)"
>
</div>
Stilisierte Elemente
<div>
ohne Text
Wenn Sie jetzt mit der Maus ĂŒber das blaue Quadrat auf der Seite fahren, wird ein Bild mit blauen Socken angezeigt. Und wenn Sie mit der Maus ĂŒber das grĂŒne Quadrat fahren - das Bild von grĂŒnen Socken. Schönheit!
Lassen Sie uns unter BerĂŒcksichtigung von Stilbindungen ĂŒber Klassenbindungen sprechen.
Aufgabe
Unsere Daten enthalten jetzt Folgendes:
inStock: true,
Wenn die Immobilie
inStock
einen Wert annimmt false
, mĂŒssen wir verhindern, dass Website-Besucher auf die SchaltflĂ€che klicken Add to Cart
, da kein Produkt auf Lager ist, was bedeutet, dass es nicht in den Warenkorb gelegt werden kann. Zum GlĂŒck gibt es ein spezielles HTML-Attribut, nach disabled
dem Sie die SchaltflÀche deaktivieren können.
Wenn wir uns an das Material der zweiten Lektion erinnern , stellt sich heraus, dass wir die Attributbindungstechnik verwenden können, um einem Element ein Attribut hinzuzufĂŒgen,
disabled
wenn es inStock
gleich false
ist oder vielmehr, wenn dieser Wert nicht wahr ist ( !inStock
). Schreiben wir den SchaltflÀchencode neu:
<button
v-on:click="addToCart"
:disabled="!inStock"
>
Add to cart
</button>
Wenn es jetzt
inStock
geschrieben ist false
, funktioniert die SchaltflÀche nicht. Aber sein Aussehen wird sich nicht Àndern. Mit anderen Worten, die SchaltflÀche sieht immer noch so aus, als ob sie angeklickt werden kann, obwohl es eigentlich keinen Sinn macht, darauf zu klicken.
Eine deaktivierte SchaltflÀche sieht genauso aus wie eine normale SchaltflÀche, aber es macht keinen Sinn, darauf zu klicken
Entscheidung
Hier werden wir genauso vorgehen wie beim Binden
inStock
an ein Attribut disabled
. Und zwar werden wir die Klasse binden disabledButton
unseren Button in FĂ€llen , in denen es inStock
speichert false
. Wenn bei diesem Ansatz das Klicken auf die SchaltflÀche sinnlos ist, sieht sie entsprechend aus.
<button
v-on:click="addToCart"
:disabled="!inStock"
:class="{ disabledButton: !inStock }"
>
Add to cart
</button>
Die deaktivierte SchaltflÀche sieht so aus, wie sie sollte.
Wie Sie sehen können, wird die SchaltflÀche jetzt grau, wenn sie
inStock
gleich istfalse
.
Werfen wir einen Blick darauf, was hier los ist.
Schauen Sie sich diese Zeile an:
:class="{ disabledButton: !inStock }"
Hier verwenden wir die AbkĂŒrzung fĂŒr die Direktive
v-bind
( :
), um die Datenbindung an das class
button- Attribut zu organisieren . In geschweiften Klammern bestimmen wir das Vorhandensein der Klasse disabledButton
basierend auf der Wahrheit der Eigenschaft inStock
.
Mit anderen Worten, wenn kein Produkt auf Lager ist (
!inStock
), wird der SchaltflĂ€che eine Klasse hinzugefĂŒgt disabledButton
. Da diese Klasse die Hintergrundfarbe der SchaltflÀche auf Grau setzt, wird die SchaltflÀche grau.
Wunderbar! Wir haben gerade unser neues Wissen ĂŒber Klassenbindung mit Wissen ĂŒber Attributbindung kombiniert und konnten die SchaltflĂ€che deaktivieren und grau machen, wenn sie
inStock
gleich ist false
.
zusÀtzliche Information
Sie können ein Objekt von Klassen oder ein Array von Klassen an ein Element binden:
<div :class="classObject"></div>
<div :class="[activeClass, errorClass]"></div>
Werkstatt
Wenn der
inStock
Wert geschrieben wird false
, mĂŒssen Sie an das Tag anhĂ€ngen, das <p>
den Text anzeigt Out of Stock
, eine Klasse, die dem Element einen text-decoration: line-through
durchgestrichenen Text hinzufĂŒgt.
â Hier ist eine Vorlage, mit der Sie dieses Problem lösen können.
â Hier ist die Lösung des Problems.
Ergebnis
Hier sind die wichtigsten Dinge, die wir heute gelernt haben:
- Daten können an ein Attribut von Elementen gebunden werden
style
. - Daten können an ein Attribut von Elementen gebunden werden
class
. - Beim Organisieren der Klassenbindung können Sie AusdrĂŒcke verwenden, deren Berechnung bestimmt, ob die entsprechende Klasse an ein Element gebunden wird.
Sie haben den gröĂten Teil dieses Kurses abgeschlossen. Bitte teilen Sie Ihre EindrĂŒcke.
â 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