Remoção Reativa de Componentes no Vue
Vamos aprender a remover componentes filhos
de uma lista de forma reativa.
Para fazer isso, vamos criar um botão específico
em cada componente filho.
Ao clicar neste botão, um evento será emitido
e no componente pai o componente filho especificado
será removido pelo seu id.
Vamos começar a implementação. Suponha que no componente pai exista o seguinte array de objetos:
data() {
return {
users: [
{
id: 1,
name: 'name1',
surn: 'surn1'
},
{
id: 2,
name: 'name2',
surn: 'surn2'
},
{
id: 3,
name: 'name3',
surn: 'surn3'
},
],
}
}
Vamos escrever no componente pai
um método para remover um usuário pelo seu id:
methods: {
remove(id) {
this.users = this.users.filter((user) => {
return user.id !== id;
})
}
}
Vamos criar os componentes em um loop, passando
como parâmetro o nome, sobrenome, id
e o método de remoção:
<template>
<User
v-for ="user in users"
:id ="user.id"
:name ="user.name"
:surn ="user.surn"
@remove ="remove"
:key ="user.id"
/>
</template>
Vamos definir os dados de entrada na configuração props
e o evento emitido na configuração emits:
props: {
id: Number,
name: String,
surn: String,
},
emits: ['remove'],
Vamos exibir no template do componente o nome e sobrenome do usuário:
<template>
{{ name }}
{{ surn }}
</template>
Agora, vamos criar um botão que, ao ser clicado,
emite um evento para remoção. O parâmetro deste evento
será o id do componente.
O componente pai, ao receber o evento,
removerá este usuário do array de objetos
e ele desaparecerá reativamente da lista de usuários.
Então, vamos implementar este botão:
<template>
{{ name }}
{{ surn }}
<button @click="$emit('remove', id)">
remover
</button>
</template>
Exiba em um loop os componentes Employee.
Crie em cada componente um botão
para removê-lo.