Reaktiivinen komponenttien poisto Vue:ssa
Opitaan reaktiivisesti poistamaan
lapsikomponentteja listasta.
Tehdään tätä varten jokaisessa lapsikomponentissa
erityinen painike.
Kun painiketta painetaan,
lähetetään tapahtuma ja vanhempakomponentissa
poistetaan määritetty
lapsikomponentti sen id:n perusteella.
Ryhdytään toteuttamaan. Olkoon vanhempakomponentissa seuraava objektilista:
data() {
return {
users: [
{
id: 1,
name: 'name1',
surn: 'surn1'
},
{
id: 2,
name: 'name2',
surn: 'surn2'
},
{
id: 3,
name: 'name3',
surn: 'surn3'
},
],
}
}
Kirjoitetaan vanhempakomponenttiin
metodi käyttäjän poistamiseksi sen id:n perusteella:
methods: {
remove(id) {
this.users = this.users.filter((user) => {
return user.id !== id;
})
}
}
Luodaan komponentit silmukassa, välittäen
niille parametrina nimen, sukunimen, id:n
ja poistometodin:
<template>
<User
v-for ="user in users"
:id ="user.id"
:name ="user.name"
:surn ="user.surn"
@remove ="remove"
:key ="user.id"
/>
</template>
Määritellään saapuvat tiedot props-asetuksessa
ja lähetettävä tapahtuma emits-asetuksessa:
props: {
id: Number,
name: String,
surn: String,
},
emits: ['remove'],
Näytetään komponentin esityksessä käyttäjän etu- ja sukunimi:
<template>
{{ name }}
{{ surn }}
</template>
Tehdään nyt painike, jota painettaessa
lähetetään poistotapahtuma.
Tämän tapahtuman parametrina
lähetetään komponentin id.
Vanhempakomponentti vastaanottaessa
tapahtuman poistaa kyseisen käyttäjän objektilistasta
ja se reaktiivisesti katoaa
käyttäjälistasta.
Toteutetaan tämä painike:
<template>
{{ name }}
{{ surn }}
<button @click="$emit('remove', id)">
remove
</button>
</template>
Näytä silmukassa Employee-komponentit.
Tee kuhunkin komponenttiin painike
sen poistamista varten.