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 コンポーネントをループ内で表示してください。
各コンポーネントに、自身を削除するためのボタンを作成してください。