小程序缓存之对象 例如商品加入购物车

因为对象和字符串之间的通信需要处理,我这里直接定义几个公用方法,可以定义在某个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实现,方法很多 重点在于公司的要求和自己用的顺手就行。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值