因为对象和字符串之间的通信需要处理,我这里直接定义几个公用方法,可以定义在某个js文件里面,这里以utils.js为例
1.从缓存中通过key去获取购物车的对象数据
const getStorageData = key => {
var value = wx.getStorageSync(key) || "{}";
var valueJson = JSON.parse(value);
return valueJson;
}
2.设置购物车对象的数据放到缓存当中去
const setStorageData = (key, value) => {
value = value || {};
var valueStr = JSON.stringify(value);
wx.setStorageSync(key, valueStr);
}
3.通过某个数据的ID去获取该条数据在此条缓存中的下标
const getCarIndex = (carList, Id ) => {
var result=null;
if (!carList) { return null; }
carList.forEach((item, index) => {
if (item.Id == Id) {result=index;return false; }
});
return result;
}
下面是使用的页面js,定义的公共js记得导出导入方可使用
比如在util.js里面
module.exports = {
getStorageData:getStorageData,
setStorageData:setStorageData,
getCarIndex:getCarIndex
}
下面是你使用的页面js,导入的方法如下
const utils = require("../../../utils/util.js");
4.添加商品到购物车
// 加入购物车
addtocar() {
var carList = [];
var carListTemp = utils.getStorageData('testCar');
if (JSON.stringify(carListTemp) == '{}') { carList = [];}
else { carList = carListTemp; }
var carIndex = utils.getCarIndex(carList, 1);
if (carIndex == null) {
carList.push({
"Id": 1,
"Title": "testTitle",
"goodsNum": 1,
"checked:false
});
} else {
carList[carIndex].goodsNum = carList[carIndex].goodsNum + 1;
}
utils.setStorageData('testCar', carList)
},
5.从购物车添加商品准备去购买,用preoder预选商品
//goodsCarData是从缓存当中读取的购物车数据
let preOrder=[];
this.data.goodsCarData.forEach((item, index) => {
if (item.checked == true) {
preOrder.push(item);
}
})
utils.setStorageData('preOrder', preOrder);
6.从下单页面 下单之后根据预选商品去删除购物车中相关的数据
this.data.preOrderList.forEach((item, idnex) => {
let goodsIndex = utils.getCarIndex(utils.getStorageData('goodsCar'), item.Id);
var carList = [];
var carListTemp = utils.getStorageData('goodsCar');
carList = carListTemp;
var carIndex = utils.getCarIndex(carList, item.Id);
var newList = carList.slice(0, carIndex).concat(carList.slice(carIndex + 1, carList.length));
utils.setStorageData('goodsCar', newList);
})
utils.setStorageData('preOrder',[]);
大概的逻辑思路都在这里了,当然也可以用vuex实现,方法很多 重点在于公司的要求和自己用的顺手就行。