身長を変更するために必要な値を引数として受け取る
Tweet- changeHeight メソッドが、誰の身長を変更するのかを特定するために必要な
id
と、どれだけ値を変更するかを決定するために必要なvalue
を引数として受け取るようにする - さらに changeHeight を実行する Heigth コンポーネント内で、実行時に適切な id と value を引数として渡すようにする
- id は Member コンポーネントから Height コンポーネントへと渡す
App.vue
<template>
<div>
<Member
:changeHeight="changeHeight"
:key="member.id"
v-for="member in members"
:member="member"
>{{member.name}}</Member>
</div>
</template>
<script>
import Member from "./components/Member";
export default {
name: "App",
components: {
Member
},
data() {
return {
members: [
{ name: "中西", position: "ガード", id: 1, height: 163 },
{ name: "佐々木", position: "フォワード", id: 2, height: 173 },
{ name: "渡辺", position: "センター", id: 3, height: 180 },
{ name: "城所", position: "パワーフォワード", id: 4, height: 176 },
{ name: "荒瀬", position: "シューティングガード", id: 5, height: 168 }
]
};
},
methods: {
changeHeight(id, value) {
console.log(id, value)
}
}
};
</script>
<style>
</style>
/components/Member.vue
<template>
<div class="memberComponent">
{{member.id}}{{member.name}} {{member.position}}
<Height :changeHeight="changeHeight" :height="member.height" :id="member.id"/>
</div>
</template>
<script>
import Height from "./Height";
export default {
components: {
Height
},
props: {
member: Object,
changeHeight: Function
}
};
</script>
<style scoped>
.memberComponent {
border: 1px solid blue;
}
</style>
/components/Height.vue
<template>
<span class="heightComponent">
身長:{{height}}
<button @click="clickHandler(1)">+</button>
<button @click="clickHandler(-1)">-</button>
</span>
</template>
<script>
export default {
props: {
height: Number,
changeHeight: Function,
id: Number
},
methods: {
clickHandler(value) {
this.changeHeight(this.id, value);
}
}
};
</script>
<style scoped>
.heightComponent {
border: 1px solid green;
}
</style>