Reaktywne usuwanie komponentów w Vue
Nauczmy się reaktywnie usuwać
komponenty potomne z listy.
W tym celu zróbmy w każdym komponencie potomnym
specjalny przycisk.
Po kliknięciu na ten przycisk będzie
emitowane zdarzenie i w komponencie nadrzędnym
będzie usuwany określony
komponent potomny po jego id.
Przystąpmy do realizacji. Niech w komponencie nadrzędnym będzie następująca tablica obiektów:
data() {
return {
users: [
{
id: 1,
name: 'name1',
surn: 'surn1'
},
{
id: 2,
name: 'name2',
surn: 'surn2'
},
{
id: 3,
name: 'name3',
surn: 'surn3'
},
],
}
}
Napiszmy w komponencie nadrzędnym
metodę usuwania użytkownika po jego id:
methods: {
remove(id) {
this.users = this.users.filter((user) => {
return user.id !== id;
})
}
}
Stwórzmy komponenty w pętli, przekazując
im parametrem imię, nazwisko, id
i metodę do usuwania:
<template>
<User
v-for ="user in users"
:id ="user.id"
:name ="user.name"
:surn ="user.surn"
@remove ="remove"
:key ="user.id"
/>
</template>
Zadeklarujmy dane wejściowe w opcji props
i emitowane zdarzenie w opcji emits:
props: {
id: Number,
name: String,
surn: String,
},
emits: ['remove'],
Wyświetlmy w szablonie komponentu imię i nazwisko użytkownika:
<template>
{{ name }}
{{ surn }}
</template>
A teraz zróbmy przycisk, po kliknięciu
którego będzie emitowane zdarzenie
do usuwania. Parametrem tego zdarzenia
będzie przekazywany id komponentu.
Komponent nadrzędny po otrzymaniu
zdarzenia usunie danego użytkownika z tablicy
obiektów i on reaktywnie zniknie
z listy użytkowników.
Zaimplementujmy ten przycisk:
<template>
{{ name }}
{{ surn }}
<button @click="$emit('remove', id)">
remove
</button>
</template>
Wyświetl w pętli komponenty Employee.
Zrób w każdym komponencie przycisk
do jego usunięcia.