Реактивное удаление компонентов в Vue

Давайте научимся реактивно удалять дочерние компоненты из списка. Сделаем для этого в каждом дочернем компоненте специальную кнопку. По нажатию на эту кнопку будет испускаться событие и в родительском компоненте будет удаляться заданный дочерний компонент по его id.

Приступим к реализации. Пусть в родительском компоненте дан следующий массив объектов:

data() { return { users: [ { id: 1, name: 'name1', surn: 'surn1' }, { id: 2, name: 'name2', surn: 'surn2' }, { id: 3, name: 'name3', surn: 'surn3' }, ], } }

Напишем в родительском компоненте метод удаления юзера по его id:

methods: { remove(id) { this.users = this.users.filter((user) => { return user.id !== id; }) } }

Создадим компоненты в цикле, передав им параметром имя, фамилию, id и метод для удаления:

<template> <User v-for ="user in users" :id ="user.id" :name ="user.name" :surn ="user.surn" @remove ="remove" :key ="user.id" /> </template>

Пропишем входящие данные в настройке props и испускаемое событие в настройке emits:

props: { id: Number, name: String, surn: String, }, emits: ['remove'],

Выведем в представлении компонента имя и фамилию юзера:

<template> {{ name }} {{ surn }} </template>

А теперь сделаем кнопку, по нажатию на которую будет испускаться событие для удаления. Параметром этого события будет передаваться id компонента. Родительский компонент при получении события удалит данного юзера из массива объектов и он реактивно исчезнет из списка юзеров.

Итак, реализуем эту кнопку:

<template> {{ name }} {{ surn }} <button @click="$emit('remove', id)"> remove </button> </template>

Выведите в цикле компоненты Employee. Сделайте в каждом компоненте кнопку для его удаления.



Чат с GPT Компилятор