Im dritten Teil der Vue-Reihe dreht sich alles um Direktiven. Dabei handelt es sich um spezielle Kennzeichnungen im HTML-Code, die es ermöglichen, mithilfe von JavaScript-Ausdrücken die Erzeugung von DOM-Elementen zu beeinflussen.
In der API-Referenz von Vue.js findet sich eine Übersicht über die Direktiven.
(Bild: vuejs.org)
Die Beschreibung einer Direktive scheint deutlich komplizierter, als das Thema wirklich ist. Mit Direktiven ist es zum Beispiel möglich, dynamische Inhalte anzuzeigen oder Elemente unter bestimmten Bedingungen wegzulassen. Auch Schleifen lassen sich damit leicht realisieren.
Wer aus der Java-Welt kommt, kennt vielleicht noch die JSP-Tags, die einem ähnlichen Zweck dienten. Die meisten Vue-Direktiven erkennt man an dem Prefix v-, es gibt allerdings einige Abkürzungen.
Data-Bindings: v-bind, v-text, v-html
Beim Data-Binding werden Daten aus einer Datenquelle mit einem konsumierenden Objekt verbunden. Wenn sich die Quelle ändert, wird diese Änderung im angebundenen Objekt automatisch nachgezogen. Bei Vue ist diese Datenquelle meist das View-Model, also das Options-Objekt mit den in data() hinterlegten Eigenschaften:
Mit der Direktive v-bind lassen sich daran Attribute von HTML-Elementen binden. Ein gutes Beispiel ist einfacher HTML-Link. In diesem ist href ist ein Attribut des Anchor-Tags, mit dem das Linkziel angegeben wird. Gebunden an eine Vue-Eigenschaft im Modell sieht das folgendermaßen aus:
<a v-bind:href="targetURL">Link</a>
Ein weiteres Beispiel für ein Attribute-Binding ist das Image-Element mit dem Attribut src:
<img v-bind:src="imageURL"/>
Die Direktive v-bind lässt sich mit dem Doppelpunkt vor dem Attribut abkürzen. Der folgende Code funktioniert also genauso:
<img :src="imageURL"/>
Der Textinhalt von Elementen wie h1 oder p lässt sich mit v-text anbinden. Im folgenden Beispiel wird der Wert der Eigenschaft firstname aus der data-Funktion als Überschrift der Kategorie 1 ausgegeben:
<h1 v-text="firstname"></h1>
Wenn der Wert der Variablen in der Ausgabe von Text umgeben sein soll, empfiehlt sich stattdessen die Text-Interpolation mit der Mustache-Syntax. Sie wurde bereits in einem vorherigen Beitrag kurz vorgestellt:
<h1>Hallo {{ firstname }}</h1>
Soll nicht nur Text, sondern auch Markup dynamisch injiziert werden soll geht das mit der v-html-Direktive:
<div v-html="'<h1>Hello World</h1>'"></div>
Wegen der Gefahr von Cross-Site Scripting Attacken ist die Direktive allerdings mit Vorsicht zu genießen. Vue.js unternimmt zwar ein paar Anstrengungen wie zum Beispiel das Escapen von Strings um Script-Injection zu vermeiden, es sollten trotzdem prinzipiell keine Benutzereingaben injiziert werden.
Form-Input-Binding: v-model
Eine weitere Direktive, mit der sich Daten aus dem View-Model anbinden lassen, ist die Direktive v-model. Sie kommt bei Eingabekomponenten wie Input, Textarea oder Select zum Einsatz und funktioniert in beide Richtungen. Daten aus dem Modell werden in dem HTML-Element angezeigt und Eingaben in den Komponenten werden ins Model übertragen. Das nennt sich dann 2-Way-Data Binding:
<input v-model="firstname" />
Event-Binding: v-on
Die v-on-Direktive verbindet ein Element mit einem Event-Listener. Typisches Beispiel ist ein Button der bei Betätigung ein Click-Event auslöst:
Die Direktive v-show lässt sich ähnlich verwenden wie v-if, allerdings wird das betroffene Element auf jeden Fall im DOM gerendert. Wenn sich der Ausdruck zu false berechnet, wird lediglich die CSS-Property display auf none gesetzt, so dass das Element nicht sichtbar ist:
Listen lassen sich mit der v-for-Direktive erstellen. Dabei handelt es sich um eine foreach-Schleife wie sie aus vielen Programmiersprachen bekannt ist. v-for zählt die Elemente einer Sammlung (hier persons) auf und führt den Rumpf für jedes Element der Sammlung (hier person) aus. Damit Vue die verschiedenen Objekte sauber auseinanderhalten kann, wird ein Unique-Key (person.firstname) angegeben:
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.