Komponenteneigenschaften
HTML-Elemente sind die Bausteine zum Erstellen von Seiten. Sie können ihr Verhalten konfigurieren, indem Sie Attribute auf verschiedene Werte festlegen. Wie bereits erwähnt, ähnelt das Erstellen einer Komponente dem Erstellen eines benutzerdefinierten HTML-Tags. Daher können Sie Informationen übergeben, um die Wiederverwendung von Komponenten durch Eigenschaften zu verbessern.
Definieren von Eigenschaften
Eigenschaften sind eine Gruppe von Werten, die Sie an eine Komponente übergeben können. Normalerweise fügen Sie einer Komponente Eigenschaften hinzu, um die Werte zu übergeben, die angezeigt werden sollen, oder die ihr Verhalten auf andere Weise ändern.
Sie definieren die Eigenschaften für eine Komponente, indem Sie das props
-Feld innerhalb des script
-Elements hinzufügen. Sie können die Namen der Eigenschaften einer Komponente auflisten, indem Sie diese in einem Array auflisten:
<!-- UserDisplay component -->
<script>
export default {
name: 'UserDisplay',
props: ['name', 'age']
}
</script>
Der Aufrufer der Komponente legt die Eigenschaften fest, indem die gleiche Syntax wie ein HTML-Attribut verwendet wird. Wenn wir die vorherige Komponente verwenden, können wir name
und age
wie folgt festlegen:
<!-- inside parent component -->
<template>
<user-display name='Cheryl' age='28'></user-display>
</template>
<script>
import UserDisplay from './UserDisplay.vue';
export default {
components: {
UserDisplay
}
}
</script>
Die Werte Cheryl
und 28
werden durch eine Attributbindung jeweils an die name
und age
-Eigenschaften gebunden.
Hinweis
Vue.js konvertiert die Komponente mit dem Namen UserDisplay
in user-display
in kebab-case.
Beschränken von Typen
Das aufrufende Element kann Werte eines beliebigen Typs übergeben, indem es sie als Teil eines Arrays auflistet. Diese Methode ist für einfache Anwendungen geeignet, doch oft sollten Sie angeben, welche Datentypen Sie für die einzelnen Eigenschaften erwarten.
Sie können stabilere Informationen über die Eigenschaften bereitstellen, indem Sie ein Schema definieren. Wenn Sie angeben möchten, dass name
eine Zeichenfolge sein sollte und age
eine Zahl sein soll, können Sie das Eigenschaftsschema wie folgt definieren:
<!-- UserDisplay component script -->
<script>
export default {
name: 'UserDisplay',
props: {
name: String,
age: Number
}
}
</script>
Beachten Sie, dass Sie ein Eigenschaftsobjekt mit den Typen für name
und age
erstellen. Diese Komponente akzeptiert jetzt nur die angegebenen Datentypen. Sie können sie weiterhin wie zuvor festlegen:
<!-- inside parent component -->
<user-display name='Cheryl' age='28'></user-display>
Wenn Sie jedoch Datentypen auf Werte festlegen, die nicht mit dem Schema übereinstimmen, z. B. das Übergeben einer Zahl an name
, wird in der Konsole eine Warnung angezeigt. In der Warnung werden Sie aufgefordert, entsprechende Maßnahmen zu ergreifen.
Komplexe Objekte
Wenn Sie mit Vue arbeiten, arbeiten Sie in der Regel mit Objekten und nicht mit einzelnen Werten. Glücklicherweise können Sie komplexe Strukturen mithilfe von Eigenschaften deklarieren.
Wenn Sie ein User
-Objekt mit den Eigenschaften name
und age
verwenden, können Sie dieses Objekt in ihren Eigenschaften als vollständiges Konstrukt deklarieren:
<!-- UserDisplay component script -->
<script>
export default {
name: 'UserDisplay',
props: {
user: {
name: String,
age: Number
}
}
}
</script>
Sie können den Wert wie zuvor mit dem-Attribut festlegen. Außerdem können Sie dynamische Daten übergeben, indem Sie den Namen des Objekts angeben, das Sie verwenden möchten. Im folgenden Beispiel wird ein Datenelement mit dem Namen user
mit derselben Syntax wie statische Werte übermittelt:
<!-- parent component -->
<template>
<user-display :user="user"></user-display>
</template>
<script>
import UserDisplay from './UserDisplay.vue';
export default {
data() {
return {
user: {
firstName: 'Cheryl',
age: 28
}
}
},
components: {
UserDisplay
}
}
</script>
Verwenden von Eigenschaften innerhalb einer Komponente
Innerhalb einer Komponente können Eigenschaften auf die gleiche Weise wie Daten gelesen werden. Die vollständige UserDisplay
-Komponente könnte wie folgt aussehen:
<template>
<div>Name: {{ user.name }}</div>
<div>Age: {{ user.age }}</div>
</template>
<script>
export default {
name: 'UserDisplay',
props: {
user: {
name: String,
age: Number
}
}
}
</script>
Wichtig
Im Gegensatz zu zustandsbehafteten Daten sind Werte, die über Eigenschaften übertragen werden, unidirektional gebunden. Wenn Änderungen an einer Eigenschaft vorgenommen werden, werden diese Aktualisierungen nicht zurück zum übergeordneten Element übertragen.