In dieser Übung werden Vue Komponente Testgetrieben (weiter-) entwickeln.
Es ist Zeit, die filter-Funktionalität in der Anwendung zu integrieren.
Integriert die filter-Funktionalität in CustomerTable.vue
.
Dafür brauchen wir ein kleines Formular mit einem Input-Feld und einem Submit-Button.
Ein Test ist bereits in CustomerTable.spec.ts
vorhanden, muss nur aktiviert werden und sollte am Ende grün sein.
- Um das richtige Formular zu finden (auf der Seite gibt es ja ein weiteres Formular), bietet es sich an
<form role="search">
zu verwenden und das Formular dann übergetByRole("search")
zu finden. - Das Standardverhalten von Browsern passt manchmal nicht zu modernen Webanwendungen.
<form>
sendet eigentlich ein Formular ab, in dem der Browser selbst die unter<form action="...">
spezifizierte URL anspringt und den Inhalt des Formulars perGET
oderPOST
mit schickt.- Wenn man das nicht will, muss man das
submit
-Event von<form>
abfangen und perevent.preventDefault()
das Default-Verhalten unterdrücken. - In Vue geht das durch eine Reihe von modifiern sehr einfach, z.B. mit
<form @submit.prevent="handleSubmit">
. Damit wirdhandleSubmit
aufgerufen und davor automatisch das Default-Verhalten unterbunden.
Wir wollen neue Customers hinzufügen können. Dafür muss ein Formular implementiert werden, indem alle Attribute ausgefüllt werden können.
- Entwickelt testgetrieben eine neue Komponente, die ein Formular zur Erstellung eines Customer darstellt.
Der Customer wird leer initialisiert und alle Felder werden per
v-model
im Form eingebunden. Für die Adressen reicht es erstmal, wenn eine einzige Adresse initialisiert wird. - Emittiert ein Event, wenn man das
<form>
abgeschickt wird. Events lassen sich mittelsdefineEmits
deklarieren. Auch hier ist nötig, mittels<form @submit.prevent>
zu verhindern, dass der Browser das Formular selbst abschickt. Es bietet sich an, einen<button type="submit">
hinzuzufügen, damit man sowohl mit dem Button als auch mit der Tastatur (Enter) speichern kann. - Setzt die Formularfelder zurück beim Abschicken des Formulars (d.h. auf eine leere Texte).
- Integriert die neue Komponente in die
CustomerPage.vue
. Wenn ein Customer emittiert wird, soll er in der Liste hinzugefügt und angezeigt werden.