我开发了一个页面,负责显示书籍,响应来自后端api,基于它显示为卡片的响应数据。
每个图书卡包含两个按钮部分,第一部分包含“添加到书包”和“愿望列表”按钮(默认情况下应可见),第二部分包含一个名为“添加到书包”的按钮(默认情况下应隐藏)。
如果用户单击任何卡的“添加到袋子”按钮,则该按钮应隐藏(添加到袋子和愿望列表),并仅显示特定已单击卡的“添加到袋子”按钮。请帮助我限制其余卡的样式(已单击的卡除外)。
这是单击“添加到行李”按钮之前的默认页面
这就是我在点击任何卡片添加到袋子按钮后获得输出的方式,但我只需要在特定的点击卡片上应用样式DisplayBooks.vue
```
<button type="button" @click="toggle(book.id);toggleClass(book.id);" v-bind:class="[storeBooks.indexOf(book.id) >-1 ? 'red' : 'blue']" class="AddBag">Add to Bag</button>
<button class="wishlist">wishlist</button>
</div>
<!-- v-if="state==false" -->
<div v-bind:class="[!(storeBooks.indexOf(book.id)) >-1 ? 'blue':'red']" @click="toggle(book.id)" class="AddedBag">
<button class="big-btn">Added to Bag</button>
</div>
</div>
</div>
更改组件代码后,我如何获得输出
![](https://i.stack.imgur.com/Goc5L.png)
但实际上我所期待的是[我需要的是]3 `DisplayBooks.scss` ```
@import "colors";
.carddisplay-section {
display: flex;
align-items: flex-start;
flex-wrap: wrap;
align-content: space-around;
gap: 10px;
}
.card:hover{
box-shadow:0.6px 0.6px 0.6px 0.6px rgb(173, 206, 206);
}
.card {
margin-top: 55px;
margin-left: 110px;
background:$pink;
// width: 235px;
// height: 275px;
width: 235px;
height: 315px;
background: $pale_white 0% 0% no-repeat padding-box;
border: 1px solid $border_clr;
border-radius: 3px;
opacity: 1;
}
.image-section {
width: 233px;
height: 172px;
background: #F5F5F5 0% 0% no-repeat padding-box;
border-radius: 2px 2px 0px 0px;
opacity: 1;
}
img{
margin-left: 67px;
margin-top: 17px;
width: 105px;
height: 135px;
opacity: 1;
border:none;
}
.title-section {
text-align: left;
font: normal normal normal 14px/19px Roboto;
letter-spacing: 0.2px;
color: $light_black;
opacity: 1;
margin-left: 20px;
margin-top: 3px;
width: 130px;
height: 19px;
text-transform: capitalize;
}
.author-section {
text-align: left;
font: normal normal normal 13px/13px Roboto;
letter-spacing: 0px;
color: $light_grey;
opacity: 1;
width: 123px;
height: 13px;
margin-left: 20px;
margin-top: 7px;
}
.price-section {
text-align: left;
font: normal normal bold 12px/16px Roboto;
letter-spacing: 0px;
color: $light_black;
opacity: 1;
margin-left: 20px;
height: 16px;
margin-top: 26px;
display: flex;
justify-content: flex-start;
}
label {
text-decoration-line: line-through;
font: normal normal normal 10px/13px Roboto;
letter-spacing: 0px;
color: $light_grey;
opacity: 1;
width: 36px;
height: 13px;
margin-top: 2.5px;
margin-left: 1em;
}
button[type="submit"] {
border: none;
padding-left: 65px;
background: none;
font-size: 15;
}
.button-groups{
display:flex;
margin-top:8px;
}
.AddBag{
background: #A03037 0% 0% no-repeat padding-box;
border-radius: 2px;
opacity: 1;
width: 93px;
height: 29px;
margin-left:20px;
color: #FFFFFF;
text-transform: uppercase;
opacity: 1;
font-size: small;
}
.wishlist{
margin-left:4px;
color: #FFFFFF;
text-transform: uppercase;
opacity: 1;
font-size: small;
border: 1px solid #7c7a7a;
border-radius: 2px;
opacity: 1;
color: #0A0102;
width:93px;
}
.big-btn{
width: 191px;
height: 29px;
margin-left:20px;
background: #3371B5 0% 0% no-repeat padding-box;
border-radius: 2px;
opacity: 1;
color:#FFFFFF;
}
.red{
background: red;
}
.blue{
background: yellow;
display:none;
}
2条答案
按热度按时间wmvff8tz1#
您可以在中定义一个数组来存储在组件数据函数中添加的卡,如storebooks
storeBooks=[]
```toggle = (id) => {
const index = this.storeBooks.indexOf(id);
if(index > -1) {this.storeBooks = this.storeBooks.splice(index,1)}
else{
this.storeBooks.add(id)
}}
2j4z5cfb2#
您当前只有一个布尔值可用于检查图书是否添加到购物车,如果您添加了其中任何一个,则会自动触发该类,它将影响所有其他图书。
您可以通过向书本数据添加额外的键来解决此问题,这样您就可以使用数组附带的spread运算符和map函数检查是否添加了单独的书本:
这段代码所做的就是获取每个book对象,并将带有false值的isactive键添加到其中。您只需在html和v-show中使用此键即可显示您喜欢的按钮:
通过这种方式,您可以控制要显示的按钮,我建议您更改isactive变量的名称,因为理解什么是活动的很容易混淆。