Einstieg in Vue-Komponenten

Abgeschlossen

Definitionsgemäß ist eine Komponente „ein Teil oder Element eines größeren Ganzen“. Wenn Sie eine Anwendung erstellen möchten, arbeiten Sie in der Regel mit kleineren Teilen und kombinieren sie zu einem größeren Ganzen: Ihrer Anwendung. Mit Vue können Sie Komponenten erstellen, die Sie anschließend zum Erstellen einer vollständigen Anwendung verwenden können.

Vue-Komponenten

Obwohl Sie Komponenten mithilfe von JavaScript-Dateien erstellen können, besteht die gängigste Methode darin, Einzeldatei-Komponenten mithilfe der Vue-Syntax in einer .vue-Datei zu erstellen. Einzeldatei-Komponenten ermöglichen eine klare Struktur und ein eigenständiges Setup. Sie können sogar verschiedene Präprozessoren verwenden, z. B. Pug oder Stylus.

Wenn Sie Komponenten erstellen, erstellen Sie im Grunde neue Tags, die Sie in Ihrer Anwendung ähnlich wie normale HTML-Tags verwenden können. Diese Form von semantischen Tags verdeutlicht, was auf einer Seite angezeigt wird. Ein Tag wie <booking-form></booking-form> wird wahrscheinlich ein Formular zum Erstellen einer Buchung anzeigen und <booking-list></booking-list> wahrscheinlich eine Liste der Buchungen anzeigen.

Vue-Komponenten-Struktur

Vue-Komponenten enthalten drei Hauptabschnitte: style, script und template.

Format

Der style-Abschnitt kann beliebige gültige CSS- oder Syntax-Elemente eines beliebigen Präprozessors enthalten, die Sie möglicherweise verwenden.

Sie können auch den Umfang Ihres CSS auf eine bestimmte Komponente festlegen, indem Sie das scoped-Attribut verwenden. Die Stile gelten dann nur für diese Komponente, sodass Sie Klassen und andere Einstellungen erstellen können, ohne sich Gedanken machen zu müssen, dass andere Teile der Seite versehentlich geändert werden.

<style>
.demo {
    font-family: Verdana
}
</style>

script

Der script-Abschnitt speichert das Skript, das für die Komponente verwendet wird. Wie bei einer Vue-JavaScript-Komponente können Sie die verschiedenen Vue-Eigenschaften und -Methoden exportieren, wie z. B. data(), methods und components.

<script>
export default {
    data() {
        return {
            product: {
                name: 'Cruise to the moon',
                description: 'A cool cruise to the moon!'
            }
        }
    }
}
</script>

Vorlage

Der template-Abschnitt enthält die HTML-Vorlage, die Sie verwenden, um Informationen anzuzeigen und dem Benutzer die Interaktion mit den Daten zu ermöglichen. Wenn Sie eine JavaScript-basierte Komponente verwenden, befindet sich template in der Regel in der HTML-Datei oder als Zeichenfolgenliteral in einer JavaScript-Datei.

Die in template verwendete HTML-Syntax ist mit JavaScript-basierten Komponenten identisch, einschließlich der Verwendung von Handlebars ({{}}) zum Anzeigen von Daten.

<template>
  <div id="product">
    <div>{{ product.name }}</div>
    <div>{{ product.description }}</div>
  </div>
</template>

Hinweis

Vorlagen müssen ein Root-Element enthalten. Das heißt, das div-Element mit product als id darf keine gleichgeordneten Elemente besitzen. Es dürfen lediglich untergeordnete Elemente vorhanden sein, wie im vorangehenden Code gezeigt.

Laden und Komponenten

Wie bereits erwähnt, werden Einzeldatei-Komponenten mit der Erweiterung .vue gespeichert. Sie können diese Komponenten auf ähnliche Weise wie andere Module laden, indem Sie die import-Anweisung verwenden. Sie können sie mithilfe der components-Eigenschaft registrieren. Nachdem die Komponenten registriert wurden, sind Sie für die Verwendung als Tag in template verfügbar.

Hinweis

Wenn Sie eine Bibliothek mithilfe von import importieren, wird standardmäßig PascalCase für den Namen verwendet, bei dem der erste Buchstabe für jedes Wort großgeschrieben wird (z. B. PascalCase). HTML verwendet als Konvention für Tag-Namen jedoch kebab-case, bei alle Wörter kleingeschrieben und durch Bindestriche (-) getrennt werden. Die beiden unterschiedlichen Konventionen werden von Vue automatisch verwaltet.

<template>
<product-display></product-display>
</template>
<script>
import ProductDisplay from './ProductDisplay.vue'
export default {
    components: {
        ProductDisplay
    }
}

Im vorangehenden Code wird die Komponente ProductDisplay importiert und zur components-Eigenschaft hinzugefügt. Wenn ProductDisplay in der Vorlage verwendet wird, erkennt der Vue-Compiler, dass es sich bei dieser Komponente um ein zu analysierendes Element und nicht um ein reguläres HTML-Element handelt.

Separation of Concerns

Das Platzieren von HTML, CSS und JavaScript in einer Datei scheint eine Abkehr von der bewährten Vorgehensweise beim Erstellen separater Dateien für jeden Typ zu sein. In der Praxis kann das Wechseln zwischen diesen Dateien aufgrund von Abhängigkeiten zwischen diesen Dateien zu einer verlangsamten Entwicklung führen. Außerdem führt dies zu einer kognitiven Belastung, weil Sie zwischen Dateien wechseln müssen.

Mit Einzeldatei-Komponenten können Sie separate Dateien für die script- und style-Abschnitte mithilfe des src-Attributs erstellen.

<template>
    <div>Hello, world</div>
</template>
<script src="./hello.js"></script>
<style src="./style.css"></style>