var numDom= this.$refs; let itemIndex=-1; for (var i = 0; i <= this.shoppingCar.length - 1; i++) { //购物车中的卡片的itemid和缓存的itemid一样 if ( value.itemId==this.shoppingCar[i].itemId) { if(this.sum !== 0){ this.sum=(this.sum.toFixed(2)*100000000000000)/100000000000000; } //购物车的选择数量同步到缓存 this.shoppingCar[i].numValue = parseInt(numDom[value.itemId][0].inputValue) //如果购物车中商品数量为最后一个 if (this.shoppingCar[i].numValue == 0) { //记录购物车中选择数量为0的元素 itemIndex=i; break; } } } if(-1!=itemIndex){ let temp=[]; for (var i = 0; i <= this.shoppingCar.length - 1; i++) { if(i!=itemIndex){ temp.push(this.shoppingCar[i]); } } console.log("temp",temp); this.shoppingCar=temp; }为什么还会出现第二个卡片的显示数量变为0,但localStorage中为1
时间: 2024-04-01 11:33:25 浏览: 19
这段代码中出现这种情况,可能是因为你在操作过程中没有正确更新相关数据,导致数据不一致。建议你检查以下几点:
1. 确认缓存和购物车的数据结构是否一致,包括存储数据的键值、数据类型、数据格式等。
2. 确认更新缓存和购物车数据的代码是否正确,是否正确更新了对应的数据,并且只更新了当前操作的商品数据。
3. 确认购物车中商品的数量是否正确,包括数量显示和数据计算。
4. 确认在更新缓存和购物车数据时,是否有异步操作或者涉及到其他的数据操作,可能会导致数据不一致。
建议你在每次操作后,都进行数据的检查和更新,确保数据的一致性和准确性。如果还有问题,建议你在代码中添加调试信息,逐步排查问题。
相关问题
可以给一下解决的方法吗?我现在的代码如下:handleChange(value){ var numDom= this.$refs; for (var i = 0; i <= this.shoppingCar.length - 1; i++) { if ( value.itemId==this.shoppingCar[i].itemId) { if(this.sum !== 0){ this.sum=(this.sum.toFixed(2)*100000000000000)/100000000000000; } this.shoppingCar[i].numValue = parseInt(numDom[value.itemId][0].inputValue) //如果购物车中商品数量为最后一个 if (this.shoppingCar[i].numValue == 0) { // this.shoppingCar.splice(i,2) this.shoppingItem.data=[] } this.shoppingItem.data = JSON.parse(uni.getStorageSync(this.sellerId)) break; } } this.shoppingItem.data.forEach(item=>{ item.numValue=numDom[item.itemId][0].inputValue }) this.sumAdd() this.sumCount() uni.setStorageSync(this.sellerId,JSON.stringify(this.shoppingCar)) uni.setStorageSync('doAccounts', JSON.stringify(this.sum)) uni.setStorageSync('count', JSON.stringify(this.count)) this.shoppingItem.data = JSON.parse(uni.getStorageSync(this.sellerId))
你可以尝试以下修改:
1. 在删除商品前,先复制一份`shoppingCar`数组,避免直接修改原来的数组:
```
let newShoppingCar = JSON.parse(JSON.stringify(this.shoppingCar));
```
2. 对复制的数组进行删除操作:
```
if (this.shoppingCar[i].numValue == 0) {
newShoppingCar.splice(i, 1);
}
```
3. 将复制的数组赋值给原数组:
```
this.shoppingCar = newShoppingCar;
```
4. 最后再将修改后的`shoppingCar`数组存储到`localStorage`中。
完整代码如下:
```
handleChange(value) {
var numDom = this.$refs;
for (var i = 0; i <= this.shoppingCar.length - 1; i++) {
if (value.itemId == this.shoppingCar[i].itemId) {
if (this.sum !== 0) {
this.sum=(this.sum.toFixed(2)*100000000000000)/100000000000000;
}
this.shoppingCar[i].numValue = parseInt(numDom[value.itemId][0].inputValue)
//如果购物车中商品数量为0
if (this.shoppingCar[i].numValue == 0) {
let newShoppingCar = JSON.parse(JSON.stringify(this.shoppingCar));
newShoppingCar.splice(i, 1);
this.shoppingCar = newShoppingCar;
}
this.shoppingItem.data = JSON.parse(uni.getStorageSync(this.sellerId))
break;
}
}
this.shoppingItem.data.forEach(item => {
item.numValue = numDom[item.itemId][0].inputValue
})
this.sumAdd()
this.sumCount()
uni.setStorageSync(this.sellerId, JSON.stringify(this.shoppingCar))
uni.setStorageSync('doAccounts', JSON.stringify(this.sum))
uni.setStorageSync('count', JSON.stringify(this.count))
this.shoppingItem.data = JSON.parse(uni.getStorageSync(this.sellerId))
}
```
这样就可以避免删除商品时对其他商品产生影响了。
购物车中取消商品时,取消第一个商品后如果后面有第二个商品且第二个商品数量为1个,则第二个商品数量也为0了,我不想让第二个商品的数量为0。使用shoppingItem.data数组绑定card,使用shoppingCar数组存储产品的相关信息存入localStorage中,可以给一下解决的方法吗?我现在的代码如下:handleChange(value){ var numDom= this.$refs; for (var i = 0; i <= this.shoppingCar.length - 1; i++) { if ( value.itemId==this.shoppingCar[i].itemId) { if(this.sum !== 0){ this.sum=(this.sum.toFixed(2)*100000000000000)/100000000000000; } this.shoppingCar[i].numValue = parseInt(numDom[value.itemId][0].inputValue) //如果购物车中商品数量为最后一个 if (this.shoppingCar[i].numValue == 0) { // this.shoppingCar.splice(i,2) this.shoppingItem.data=[] } this.shoppingItem.data = JSON.parse(uni.getStorageSync(this.sellerId)) break; } } this.shoppingItem.data.forEach(item=>{ item.numValue=numDom[item.itemId][0].inputValue }) this.sumAdd() this.sumCount() uni.setStorageSync(this.sellerId,JSON.stringify(this.shoppingCar)) uni.setStorageSync('doAccounts', JSON.stringify(this.sum)) uni.setStorageSync('count', JSON.stringify(this.count)) this.shoppingItem.data = JSON.parse(uni.getStorageSync(this.sellerId))
可以考虑在删除商品时,判断是否为最后一个商品,如果不是最后一个商品,则只删除当前商品,如果是最后一个商品,则删除当前商品以及后面数量为1的商品。可以修改代码如下:
```
handleChange(value) {
var numDom = this.$refs;
for (var i = 0; i <= this.shoppingCar.length - 1; i++) {
if (value.itemId == this.shoppingCar[i].itemId) {
if (this.sum !== 0) {
this.sum = (this.sum.toFixed(2) * 100000000000000) / 100000000000000;
}
this.shoppingCar[i].numValue = parseInt(numDom[value.itemId][0].inputValue);
//如果购物车中商品数量为最后一个
if (this.shoppingCar[i].numValue == 0) {
// 判断是否为最后一个商品
if (i === this.shoppingCar.length - 1) {
// 删除当前商品以及后面数量为1的商品
for (var j = i; j >= 0; j--) {
if (this.shoppingCar[j].numValue !== 1) {
this.shoppingCar.splice(j, i - j + 1);
break;
}
}
} else {
// 只删除当前商品
this.shoppingCar.splice(i, 1);
}
this.shoppingItem.data = [];
}
this.shoppingItem.data = JSON.parse(uni.getStorageSync(this.sellerId));
break;
}
}
this.shoppingItem.data.forEach((item) => {
item.numValue = numDom[item.itemId][0].inputValue;
});
this.sumAdd();
this.sumCount();
uni.setStorageSync(this.sellerId, JSON.stringify(this.shoppingCar));
uni.setStorageSync('doAccounts', JSON.stringify(this.sum));
uni.setStorageSync('count', JSON.stringify(this.count));
this.shoppingItem.data = JSON.parse(uni.getStorageSync(this.sellerId));
}
```