【发布时间】:2018-03-30 17:54:41
【问题描述】:
在我的 Vue 应用程序中:我使用 v-for 来呈现产品 div,每个 div 都有一对按钮,“新”和“使用”,我想在按钮时添加“活动”类点击。问题是我正在向所有“新”按钮或所有“使用”按钮添加“活动”类;很确定有一种 Vue 方法可以做到这一点,除了获取单击按钮的索引并将类设置为相应的 el。我错过了什么?
标记:
<div id="app">
<div class="products">
<div class="product" v-for="product in products" :key="product.productID">
<div class="product-image">
<img :src=product.imgDef :alt="product.name" v-bind:title="product.name" />
</div>
<div class="product-summary">
<p>{{ product.name }}</p>
<p>{{ product.info }}</p>
<ul>
<li v-for="detail in product.details">{{ detail }}</li>
</ul>
<div
class="conditions"
v-for="variant in product.variants"
v-bind:key="variant.variantID"
v-bind:style="variant.variantStyleObj"
>
<!--
renders a 'new' button and a 'used' button in each div.product;
- clicking should add 'active' class only to clicked button
-->
<button
type="button"
v-on:click="updateProductImage(variant.variantImage, variant.variantID, product.productID, variant.condition)"
:class="[ 'condition', variant.condition, {active: conditionClass == variant.condition} ]"
>
{{ variant.condition }}
</button>
</div>
</div><!-- END .product-summary -->
</div><!-- END .product -->
</div><!-- END #app -->
js:
var app = new Vue({
el: '#app',
data: {
products: [
{
productID: 1,
name: "",
info: "",
imgDef: "../../images-dev/...jpg",
details: [],
inStock: false,
variants: [
{
variantID: "123",
variantImage: "../../images-dev/1a.jpg",
condition: "new"
},
{
variantID: "321",
variantImage: "../../images-dev/1b.jpg",
condition: "used"
}
],
inventory: 9
},
cart: 0,
// conditionClass: ""
},
methods: {
addToCart: function() {
this.cart += 3;
},
updateProductImage: function(variantImage, variantKey, productKey, variantCondition) {
this.products[productKey-1].imgDef = variantImage;
this.conditionClass = variantCondition;
}
}
})
【问题讨论】:
-
为每个变体创建一个条件类并更改它而不是全局条件类
-
谢谢@JulioGuerra。如果你不能触摸数据结构,你会如何解决这个问题?
-
可以同时激活多个按钮吗?
-
不,视图中只有一个活动按钮
标签: vue.js