Reaktív komponenstörlés a Vue-ban
Tanuljunk meg reaktívan törölni
gyermek komponenseket egy listából.
Ehhez készítsünk minden gyermek
komponensben egy speciális gombot.
Erre a gombra kattintva egy
esemény fog kibocsátásra kerülni, és a szülő
komponensben a megadott
gyermek komponens törlődik a id-ja alapján.
Lássuk a megvalósítást. Tegyük fel, hogy a szülő komponensben adott a következő objektumtömb:
data() {
return {
users: [
{
id: 1,
name: 'name1',
surn: 'surn1'
},
{
id: 2,
name: 'name2',
surn: 'surn2'
},
{
id: 3,
name: 'name3',
surn: 'surn3'
},
],
}
}
Írjunk a szülő komponensben egy
metódust a felhasználó id alapján történő törlésére:
methods: {
remove(id) {
this.users = this.users.filter((user) => {
return user.id !== id;
})
}
}
Hozzuk létre a komponenseket ciklusban, átadva
nekik paraméterként a nevet, vezetéknevet, id-t
és a törlés metódusát:
<template>
<User
v-for ="user in users"
:id ="user.id"
:name ="user.name"
:surn ="user.surn"
@remove ="remove"
:key ="user.id"
/>
</template>
Definiáljuk a bejövő adatokat a props beállításban
és a kibocsátandó eseményt a emits beállításban:
props: {
id: Number,
name: String,
surn: String,
},
emits: ['remove'],
Jelenítsük meg a komponens sablonjában a felhasználó nevét és vezetéknevét:
<template>
{{ name }}
{{ surn }}
</template>
Most készítsünk egy gombot, amelyre kattintva
egy esemény bocsátódik ki a törléshez. Ennek az eseménynek
a paramétereként a komponens id-ja lesz átadva.
A szülő komponens az esemény fogadásakor
törli ezt a felhasználót az objektumtömbből,
és az reaktívan eltűnik
a felhasználók listájából.
Valósítsuk meg ezt a gombot:
<template>
{{ name }}
{{ surn }}
<button @click="$emit('remove', id)">
remove
</button>
</template>
Jelenítsd meg ciklusban a Employee komponenseket.
Minden komponensben készíts egy gombot
annak törléséhez.