1.先判断cookie中是否有购物车,没有就把对象存到数组中,再存到cookie中,
2.如果cookie中有购物车,就通过规格Id判断cookie中的对象数组是否存在此规格Id的对象,存在就购买数量加一,不存在就把当前规格Id的对象插入到cookie对象数组中
相关前端代码
// 由于cookie大小限制为4k,另外课程第一阶段是没有redis的,所以相关暂存性内容会存入到cookie中
var shopcartCounts = app.getShopcartItemCounts();
if (shopcartCounts >= 8) {
alert("您购物车中的食物太多啦~请把它们带回家吧~!");
return;
}
// 创建购物车对象
var item = this.item;
var itemImgList = this.itemImgList;
var selectedSku = this.selectedSku;
var tmpBuyCounts = this.buyCounts;
tmpBuyCounts = parseInt(tmpBuyCounts);
if (typeof (tmpBuyCounts) != "number") {
alert("购买数量不能为非数字!");
// tmpBuyCounts = 1;
this.buyCounts = 1;
return;
}
// 构建购物车商品对象
var shopcartItem = new app.ShopcartItem(item.id,
itemImgList[0].url,
item.itemName,
selectedSku.id,
selectedSku.name,
tmpBuyCounts,
selectedSku.priceDiscount,
selectedSku.priceNormal);
// console.log(shopcartItem);
// 添加商品至购物车list
app.addItemToShopcart(shopcartItem);
// 购物车应该在登录/注册的时候同步
// 判断当前用户是否登录,如果登录,则把购物车数据发送至后端(后端需要合并已存在的商品)
var userIsLogin = this.userIsLogin;
if (userIsLogin) {
var userInfo = this.userInfo;
var serverUrl = app.serverUrl;
axios.defaults.withCredentials = true;
axios.post(
serverUrl + '/shopcart/add?userId=' + userInfo.id,
shopcartItem, {
headers: {
'headerUserId': userInfo.id,
'headerUserToken': userInfo.userUniqueToken
}
})
.then(res => {
if (res.data.status == 200) {
} else if (res.data.status == 500) {
alert(res.data.msg);
}
});
}
alert("商品添加至购物车成功!");
添加到cookie中
addItemToShopcart(pendingItem) {
// 判断有没有购物车,如果没有购物车,则new 一个购物车list
// 如果有购物车,则直接把shopcartItem丢进去
var foodieShopcartCookie = this.getCookie("shopcart");
var foodieShopcart = [];
if (foodieShopcartCookie != null && foodieShopcartCookie != "" && foodieShopcartCookie != undefined) {
var foodieShopcartStr = decodeURIComponent(foodieShopcartCookie);
foodieShopcart = JSON.parse(foodieShopcartStr);
// 如果不是对象,则重新复制为空数组
if (typeof(foodieShopcart) != "object") {
foodieShopcart = [];
}
var isHavingItem = false;
// 如果添加的商品已经存在与购物车中,则购物车中已经存在的商品数量累加新增的
for(var i = 0 ; i < foodieShopcart.length ; i ++) {
var tmpItem = foodieShopcart[i];
var specId = tmpItem.specId;
if (specId == pendingItem.specId) {
isHavingItem = true;
var newCounts = tmpItem.buyCounts + pendingItem.buyCounts;
tmpItem.buyCounts = newCounts;
// 删除主图在数组中的位置
foodieShopcart.splice(i, 1, tmpItem);
}
}
if (!isHavingItem) {
foodieShopcart.push(pendingItem);
}
} else {
foodieShopcart.push(pendingItem);
}
this.setCookie("shopcart", JSON.stringify(foodieShopcart));
}
3.获取访问路径的参数值
getUrlParam(paramName) {
var reg = new RegExp("(^|&)" + paramName + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if (r != null) return decodeURI(r[2]); return null; //返回参数值
}