我有一个使用对象数组填充的按钮列表:
<div
class="form-inline"
v-for="(genre, index) in genreArray"
:key="index"
>
<button class="btn m-1" type="button" @click="genreButton(genre, index)"
:class="[
{ 'clicked': clicked}
]"
>
{{ genre.name }}
</button>
</div>
数组具有以下格式:
genreButton=[{
id='1234'
name='buttonOne'
},
//and many more objects with same key and different values
]
我尝试通过向其添加类来更改单击的按钮的颜色:
data(){
return {
clicked: false
}
},
methods:{
genreButton(genre, index){
this.clicked = !this.clicked
}
}
这是CSS:
.clicked{
background-color= red;
}
但问题是当我这样做时,所有按钮都会改变颜色。我如何仅改变被点击的按钮的颜色?
答案 0 :(得分:2)
此处,clicked
是组件级属性,因此它由其中的所有按钮共享。
一种解决方案是为 clicked
数组的每个按钮设置一个名为 genreButton
的属性:
genreButton=[
{
id:'1234'
name:'buttonOne'
clicked: false,
},
//...
]
但是,更优雅的方法可能是使用内部 clicked
属性为按钮创建专用组件。
<template>
<button
class="btn m-1"
type="button"
@click="clicked = !clicked"
:class="[ { 'clicked': clicked} ]" >
{{ genre.name }}
</button>
</template>
<script>
export default {
name: 'CustomButton',
props: {
genre: Object,
},
data: () => ({
clicked: false,
})
}
</script>
<style scoped>
.clicked{
background-color= red;
}
</style>
然后您可以像这样使用按钮组件:
<div
class="form-inline"
v-for="(genre, index) in genreArray"
:key="index" >
<CustomButton :genre="genre" />
</div>