我是Vue.js的新手。我使用它动态地将html添加到表中,它可以使用方法AddItemToSales()
添加第一个元素,但是在添加第二个元素之后,所有的东西都会消失,添加第三个元素也不会恢复。
这些项目被添加到vue变量内部的列表中,因为我可以调用getSaleItems()
,它准确地显示了添加的所有内容。
这里怎么了?我没有收到任何错误信息。
vue.js:
var vueSales = new Vue({
el: '#saleItemsTableBody',
data: {
saleItems: []
},
methods: {
addItemToSales(name, sku, pricePerUnit) {
if(this.saleItems.some(x => x.name === name && x.sku === sku)) {
var item = this.saleItems.find(x => x.name === name && x.sku === sku);
item.quantity++;
} else {
this.saleItems.push({"name": name, "sku": sku, "quantity": 1, "pricePerUnit": parseFloat(pricePerUnit)})
}
},
getSaleItems() {
return this.saleItems;
}
},
});
HTML:
<tbody id="saleItemsTableBody" v-for="saleItem in saleItems" :key="saleItem.name">
<template>
<tr>
<td class="pl-0">
<a href="#" class="text-dark-75 font-weight-bolder text-hover-primary mb-1 font-size-lg"> @{{ saleItem.name }} </a>
<span class="text-muted font-weight-bold text-muted d-block">Stock available: totalStock units</span>
</td>
<td>
<div class="quantity-input-group input-group">
<div class="input-group-prepend">
<button class="btn btn-light-dark" type="button">-</button>
</div>
<input value="1" min="1" max="100" type="text" class="form-control" placeholder="units"/>
<div class="input-group-append">
<button class="btn btn-light-dark" type="button">+</button>
</div>
</div>
<p class="quantity-warning text-danger">Only totalStock units available in stock.</p>
</td>
<td>
<a href="#" class="text-dark-75 font-weight-bolder text-hover-primary mb-1 font-size-lg">$ @{{ saleItem.pricePerUnit }}</a>
<span class="text-muted font-weight-bold text-muted d-block">Unimplemented</span>
</td>
<td>
<a href="#" class="text-dark-75 font-weight-bolder text-hover-primary mb-1 font-size-lg">$ <span> @{{ saleItem.pricePerUnit }} </span></a>
<span class="text-muted font-weight-bold text-muted d-block">Un <span> Implemented </span></span>
</td>
<td class="pr-0 text-right">
<a href="#" class="btn btn-icon btn-light btn-hover-primary btn-sm">
<i class="fas fa-trash"></i>
</a>
</td>
</tr>
</template>
</tbody>
在不运行代码的情况下,看起来这是因为增加数量的方式是增加数量,但没有将其设置/分配回this.saleitems
,您需要将item
重新分配回this.saleitems。
我还没有测试过这个,但是可能是这样的:
addItemToSales(name, sku, pricePerUnit) {
if(this.saleItems.some(x => x.name === name && x.sku === sku)) {
var itemIdx = this.saleItems.findIndex(x => x.name === name && x.sku === sku);
var item = this.saleItems[itemIdx];
item.quantity++;
this.saleItems.splice(itemIdx, 0, item);
} else {
this.saleItems.push({"name": name, "sku": sku, "quantity": 1, "pricePerUnit": parseFloat(pricePerUnit)})
}
},