Vue ist ein soganntes Javascript-Framework: Dieses wurde selbst in Javascript programmiert und läuft deshalb auf einer HTML-Seite im Browser. Mit Vue kann man interaktive WebApps programmieren.
Installation
Javascript laden
Wir können den von Vue verwendeten Javascript-Code direkt im HTML-Dokument verlinken. Der Browser lädt ihn so selbst vom Netz herunter. Dazu bauen wir im Head unserer HTML-Datei folgendes script-Element ein:
<script src="https://unpkg.com/vue@3"></script>
Vue-App initialisieren
Anschliessend muss die App initialisiert werden. Dazu ruft man Vue.createApp()
(mit entsprechenden Argumenten) auf und verbindet die App mit einem HTML-Element über die mount
-Methode:
Vue.createApp().mount('#app')
Variablen
Vue definiert in der data()
-Funktion reaktive Variablen und Objekte. Diese können im HTML-Teil mit Hilfe einer Template-Sprache dargestellt oder auch an Eingabe-Elemente gebunden werden.
<div id="app">
<input type="text" v-model="name" />
Hello {{ name }}
</div>
2
3
4
Vue.createApp({
data() {
return {
name: 'Vue',
}
}
}).mount('#app')
2
3
4
5
6
7
Hello World
Diese Hello-World-Vue-App fasst das oben beschriebene zusammen:
<!DOCTYPE html>
<html lang="de">
<head>
<title>Hello Vue</title>
<script src="https://unpkg.com/vue@3"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="name" />
Hello {{ name }}
</div>
<script>
Vue.createApp({
data() {
return {
name: 'Vue',
}
}
}).mount('#app')
</script>
</body>
</html>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Aufgabe
Teste das obenstehende Beispiel aus. Versuche weitere Variablen einzubauen.
Templates
Vue-Templates beinhalten HTML-Code mit speziellen Platzhaltern und Anweisungen für Vue. Es können so Werte angezeigt werden, Elemente bedingt angezeigt werden und auf Events reagiert werden:
Variablen ausgeben
Werte von Variablen können in doppelt geschweifte Klammern ausgegeben werden.
<p>Suche nach {{ search }}</p>
In der Klammer drin sind auch einfache Javascript-Ausdrücke möglich, z.B. mit dem «bedingten Operator» – sozusagen ein abgekürztes if-else – um etwas anzuzeigen sollte die Variable search
leer sein:
<p>Suche nach {{ search ? search : "–" }}</p>
Variablen ändern
Man kann Vue-Variablen mittels v-model
an HTML-Input-Elemente knüpfen:
<input type="text" v-model="search" />
Das Text-Feld zeigt den Wert von search
an – aber man kann ihn damit auch ändern.
Listen
Listen von Elementen brauchen eine Wiederholung zur Darstellung. In Vue verwendet man dafür die v-for
-Direktive. Das für die Direktive verwendete HTML-Element wird für jeden Eintrag in der Liste dargestellt. Im Element drin kann man auf das Element der Liste zugreifen:
<div v-for="movie in movies" v-bind:key="movie.id">
<h1>{{ movie.title }}</h1>
<p>{{ movie.year }}</p>
</div>
2
3
4
- Zeile 1
- das
div
-Element wir für jedenmovie
aus der Listemovies
wiederholt - mit
:key="movie.id
setzen wir einen eindeutigen Schlüssel für die Elemente - Zeile 2 & 3
movie
ist ein Objekt aus der Listemovies
- mit der Punktnotation können wir auf die einzelnen Eigenschaften zugreifen
- Zeile 4
- Das
div
-Element – und somit auch der Zugriff aufmovie
– wird beendet
if-elseif-else
Ein HTML-Element kann mit der v-if
-Direktive bedingt gerendert werden. Der Ausdruck wird ausgewertet und das HTML-Element nur dargestellt, wenn die Auswertung true
ergibt. Das direkt nachkommende HTML-Element kann mit einer v-else
-Direktive versehen werden.
<div v-for="movie in movies" v-bind:key="movie.id">
<h1>{{ movie.title }}</h1>
<p v-if="movie.year > 2021">Neu!!</p>
<p v-else>{{ movie.year }}</p>
</div>
2
3
4
5
Seit Vue 3.2 sind zwischen v-if
und v-else
ein oder mehrere Elemente mit v-elseif
möglich.
Ereignisse
Ereignisse verwenden wir meistens wenn die Maus etwas anklickt. Dazu können wir die v-on:click
-Direktive verwenden:
<div v-for="movie in movies" v-bind:key="movie.id" v-on:click="showDetails(movie.id)">
<h1>{{ movie.title }}</h1>
<p>{{ movie.year }}</p>
</div>
2
3
4
- Zeile 1
- bei jedem Film binden wir das Klick-Event auf die Methode
showDetails
und übergeben dieser die ID des Film. Diese sollte dann Details zum Film anzeigen.
Methoden
Die Vue-App kann Methoden definieren die wir dann entweder als Ereignis oder automatisch aufrufen können:
Vue.createApp({
data() {
return {
name: 'Vue',
movies: []
}
},
methods: {
async getMovies() {
const response = await fetch("https://informatik.mygymer.ch/fts/rest/movies/");
const json = await response.json();
this.movies = json.movies;
},
showDetails(id) {
// fetch movie-Details and show in App
}
}
}).mount('#app')
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Hooks
Mit den sogenannten Hooks kann man sozusagen im Vue-Programm-Ablauf «ein-haken». So wird z.B. der created
-Hook aufgerufen, sobald die Vue-App erzeugt wurde. Er lässt sich praktisch verwenden um erste Daten zu laden:
Vue.createApp({
data() {
return {
name: 'Vue',
movies: []
}
},
methods: {
async getMovies() {
const response = await fetch("https://informatik.mygymer.ch/fts/rest/movies/");
const json = await response.json();
this.movies = json.movies;
},
showDetails(id) {
// fetch movie-Details and show in App
}
},
created() {
this.getMovies()
}
}).mount('#app')
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21