VueJS - Komponenten: Bausteine moderner Webanwendungen

Hallo da draußen, zukünftige Vue.js-Zauberer! Ich freue mich sehr, Ihr Guide auf dieser aufregenden Reise in die Welt der Vue.js-Komponenten zu sein. Als jemand, der seit Jahren Programmieren unterrichtet, kann ich Ihnen sagen, dass das Verständnis von Komponenten so ist, als würde man LEGO-Steine verwenden - wenn man den Dreh raus hat, kann man erstaunliche Dinge bauen! Also Tauchen wir ein und haben wir Spaß!

VueJS - Components

Was sind Vue.js-Komponenten?

Komponenten sind das Herz und die Seele von Vue.js-Anwendungen. Stellen Sie sich sie als wiederverwendbare Code-Teile vor, die HTML, CSS und JavaScript-Funktionalität kapseln. Genau wie man verschiedene LEGO-Steine verwendet, um ein Schloss zu bauen, kann man verschiedene Komponenten verwenden, um eine komplexe Webanwendung zu erstellen.

Hier ist ein einfaches Beispiel für eine Vue-Komponente:

<template>
<div class="greeting">
<h1>{{ message }}</h1>
</div>
</template>

<script>
export default {
data() {
return {
message: "Hallo, Vue-Komponente!"
}
}
}
</script>

<style scoped>
.greeting {
color: blau;
}
</style>

Lassen Sie uns das auseinandernehmen:

  1. Der <template>-Bereich enthält die HTML-Struktur unserer Komponente.
  2. Der <script>-Bereich definiert die Logik und Daten der Komponente.
  3. Der <style>-Bereich (mit dem scoped-Attribut) enthält CSS, das nur auf diese Komponente angewendet wird.

Erstellen und Verwenden von Komponenten

Jetzt, wo wir wissen, wie Komponenten aussehen, erstellen wir eine und verwenden sie in unserer App!

Schritt 1: Erstellen einer neuen Komponente

Erstellen Sie eine neue Datei namens Greeting.vue im components-Ordner Ihres Projekts:

<!-- Greeting.vue -->
<template>
<div class="greeting">
<h2>{{ greeting }}</h2>
</div>
</template>

<script>
export default {
data() {
return {
greeting: "Willkommen bei Vue.js!"
}
}
}
</script>

<style scoped>
.greeting {
kursiv;
color: grün;
}
</style>

Schritt 2: Verwenden der Komponente in Ihrer App

Nun verwenden wir diese Komponente in unserer Hauptdatei App.vue:

<!-- App.vue -->
<template>
<div id="app">
<h1>Meine Vue.js-App</h1>
<Greeting />
</div>
</template>

<script>
import Greeting from './components/Greeting.vue'

export default {
name: 'App',
components: {
Greeting
}
}
</script>

Hier ist, was passiert:

  1. Wir importieren die Greeting-Komponente.
  2. Wir registrieren sie in der components-Option unserer App-Komponente.
  3. Wir verwenden sie in unserem Template mit dem <Greeting />-Tag.

Und voilà! Sie haben gerade Ihre erste Vue-Komponente erstellt und verwendet!

Props: Daten an Komponenten übergeben

Props sind wie magische Rohre, die es Ihnen ermöglichen, Daten von einer Elternteilkomponente an eine Kindkomponente zu senden. Lassen Sie uns unsere Greeting-Komponente erweitern, um eine benutzerdefinierte Nachricht zu akzeptieren:

<!-- Greeting.vue -->
<template>
<div class="greeting">
<h2>{{ customGreeting }}</h2>
</div>
</template>

<script>
export default {
props: ['message'],
computed: {
customGreeting() {
return `${this.message} Willkommen bei Vue.js!`
}
}
}
</script>

Jetzt können wir sie so in unserer App.vue verwenden:

<!-- App.vue -->
<template>
<div id="app">
<h1>Meine Vue.js-App</h1>
<Greeting message="Hallo, lieber Student!" />
<Greeting message="Grüße, Vue-Begeisterter!" />
</div>
</template>

Ist das nicht toll? Wir können dieselbe Komponente mit verschiedenen Nachrichten wiederverwenden!

Ereignisse auslösen: Kind-zu-Elternteil-Kommunikation

Während Props die Kommunikation von Elternteil zu Kind ermöglichen, ermöglichen Ereignisse die Kommunikation von Kind zum Elternteil. Es ist, als ob ein Kind seinen Eltern Eis cream verlangt!

Lassen Sie uns ein Button-Komponente erstellen, das ein Ereignis auslöst, wenn es angeklickt wird:

<!-- Button.vue -->
<template>
<button @click="handleClick">{{ label }}</button>
</template>

<script>
export default {
props: ['label'],
methods: {
handleClick() {
this.$emit('button-clicked', 'Der Knopf wurde geklickt!')
}
}
}
</script>

Nun verwenden wir dies in unserer App.vue:

<!-- App.vue -->
<template>
<div id="app">
<h1>Meine Vue.js-App</h1>
<Button label="Klicke mich!" @button-clicked="handleButtonClick" />
<p>{{ message }}</p>
</div>
</template>

<script>
import Button from './components/Button.vue'

export default {
name: 'App',
components: {
Button
},
data() {
return {
message: ''
}
},
methods: {
handleButtonClick(msg) {
this.message = msg
}
}
}
</script>

Wenn der Knopf geklickt wird, löst er ein Ereignis aus, das die Elternteilkomponente hört und darauf reagiert. Es ist wie ein harmonischer Familien对话!

Slots: Flexibles Komponenteninhalt

Slots sind wie Platzhalter in Ihren Komponenten, die Sie mit whatever Inhalt füllen können, den Sie wollen. Sie sind unglaublich nützlich für die Erstellung flexibler, wiederverwendbarer Komponenten.

Lassen Sie uns eine Card-Komponente mit einem Slot erstellen:

<!-- Card.vue -->
<template>
<div class="card">
<div class="card-header">
<h3>{{ title }}</h3>
</div>
<div class="card-body">
<slot></slot>
</div>
</div>
</template>

<script>
export default {
props: ['title']
}
</script>

<style scoped>
.card {
border: 1px solid #ccc;
border-radius: 4px;
padding: 10px;
margin-bottom: 10px;
}
.card-header {
background-color: #f1f1f1;
padding: 5px;
}
</style>

Jetzt können wir diese Card-Komponente mit unterschiedlichem Inhalt verwenden:

<!-- App.vue -->
<template>
<div id="app">
<Card title="Willkommen">
<p>Willkommen in unserem Vue.js-Tutorial!</p>
</Card>
<Card title="Über Komponenten">
<ul>
<li>Komponenten sind wiederverwendbar</li>
<li> Sie können Props haben</li>
<li> Sie können Ereignisse auslösen</li>
</ul>
</Card>
</div>
</template>

<script>
import Card from './components/Card.vue'

export default {
name: 'App',
components: {
Card
}
}
</script>

Dynamische Komponenten

Dynamische Komponenten ermöglichen es Ihnen, zwischen verschiedenen Komponenten dynamisch zu wechseln. Es ist wie ein Schweizer Army Knife von Komponenten!

Lassen Sie uns ein einfaches Beispiel erstellen:

<!-- App.vue -->
<template>
<div id="app">
<button @click="currentComponent = 'Greeting'">Zeige Gruß</button>
<button @click="currentComponent = 'Button'">Zeige Knopf</button>
<component :is="currentComponent"></component>
</div>
</template>

<script>
import Greeting from './components/Greeting.vue'
import Button from './components/Button.vue'

export default {
name: 'App',
components: {
Greeting,
Button
},
data() {
return {
currentComponent: 'Greeting'
}
}
}
</script>

In diesem Beispiel verwenden wir das <component>-Element mit dem is-Attribut, um entweder die Greeting- oder die Button-Komponente basierend auf dem angeklickten Button dynamisch anzuzeigen.

Schlussfolgerung

Herzlichen Glückwunsch! Sie haben gerade Ihre ersten Schritte in die wundersame Welt der Vue.js-Komponenten gemacht. Denken Sie daran, dass wie bei jeder Fähigkeit Übung macht den Meister. Scheuen Sie sich nicht, experimentieren und Ihre eigenen Komponenten zu bauen. Vor Ihnen liegen komplexe, interaktive Webanwendungen, die Sie mit Leichtigkeit erstellen werden!

Hier ist eine schnelle Referenztabelle der Komponentenfunktionen, die wir behandelt haben:

Funktion Beschreibung
Grundstruktur Template, Script und Style Bereiche
Props Daten vom Elternteil an das Kind übergeben
Ereignisse Kommunikation vom Kind zum Elternteil
Slots Flexible Inhaltplatzhalter
Dynamische Komponenten Zwischen Komponenten dynamisch wechseln

Weiterschreiben, weiterlernen und vor allem: Viel Spaß mit Vue.js!

Credits: Image by storyset