1.将数据存储到localStorage
(1)localStorage用法:
A.设定
localStorage.setItem(键名,键值:json串格式)
localStorage.setItem(‘cart’,JSON.stringfy([{name:‘电脑’,pay:100,num:2}]))
B.获取
localStorage.getItem(‘键名’)
(2)判断购物车是否为空
A.是空车
给当前数据添加属性,写入到购物车
1.如果用localStorage.getItem判断键名cart为null,添加商品信息
2.在ajax里面给空对象赋值ajax返回的res,在外面定义。定义全局变量空对象msg
3.给全局变量msg赋值’购买数量’的属性,默认值为1
给全局变量msg赋值’购买选中’的属性,默认值为true,因为进去购物车之后是默认选中的
4.(由于购物车中,不止一个商品,因此需要创建数组,去存储商品数据信息)
创建新的空数组,向空数组arr中push写入msg的商品信息
将数组写进localStorage中进行存储,localStorage.setItem(‘cart’,JSON.stringfy(arr))
B.不是空车
当前商品已经在购物车 购买数量+1
当前商品没有在购物车 添加属性,写入购物车
1.如果已经有了商品,就要获取localStorage中存储的商品
let arr = JSON.parse(localStorage.getItem('cart'));
2.获取到存储的数组之后,需要循环遍历,来确定购物车中是否有这件商品
也就是,msg中获取的当前商品的goods_id是否相同
A.如果item里面的ID和msg里面的ID相同,就让item里面的num属性自增num++
将新的数组重新设定给cart购物车存储
B.如果不同,则设置一个开关。
在判断外面设置一个初始值bool为true
在判断有这个商品中赋值返回一个bool为false
如果bool为初始值,则num为
(3)实际案例
1.判断localStorage.getItem('cart')是否为null
是的话,输出内容;不是的话,在else中调用第二步生成的函数
2.设置一个函数,用来生成页面
(1).获取localStorage.getItem('cart')商品数据内容
(2).不需要循环的头和尾,直接给str赋值=。
(3).需要循环遍历的中间内容,对arr,也就是响应体得到的并存储到localStorage的数据进行forEach循环
在循环体中,令str+=中间模板字符串的内容
(4).循环外面 将str+=尾部
(5).内容写入container中
3.对整个父级进行事件委托
(1)由于用JQ获取到的整个标签对象为伪数组,因此需要带一个下标[0],指代标签对象本身
--JS与JQ的标签转化。JS=>JQ 用$()包
JQ=>JS 用[0]
(2)在点击事件委托中,先用localStorage.getItem获取cart数据
(3)判断全选,不选以及反选按钮。给HTML中input,type=CheckBox的属性中添加判断
判断如果item的属性buy为true,就添加'checked'属性,否则就为空字符串
--如果点击的是全选,则循环arr数组里的item,令item的属性buy为true
--如果点击的是不选,则循环arr数组里的item,令item的属性buy为false
--如果点击的是反选,则循环arr数组里的item,令item的属性buy值取反
---在取反中,需要改变localStorage存储的数据,而不是单纯改变CheckBox的状态
1.在input中添加,index属性,属性值为当前标签item的goods_id
2.循环遍历item,判断item的goods_id与点击的标签e.target获取的index标签是否相等
----全等需在获取index样式后面-0,字符串变为数值
如果相等,就给item的buy属性赋值e.target.checked,就是赋值当前点击的
(就是修改localStorage存储的item中的buy属性)
最后将新的数组写入到localStorage。localStorage.setItem('cart',JSON.stringfy(arr))
(4)删除操作
1.给点击删除的标签添加,index属性值,让他为item的goods_id
2.点击事件委托,为删除的标签。循环遍历数组
3.判断循环的每一个item的goods_id是否等于委托事件e.target获取到的index属性值
如果是,就给arr进行splice删除商品单元。arr.splice(key,1)
从索引key开始,删除1个
(5)左右加减操作
1.如果事件的点击为加,则arr循环每一个item对象。
2.添加禁用效果
在HTML模板字符串,添加,如果item.num值为item.goods_number,就disabled,不然就为空字符串
(6)生成最底部的件数,钱数
1.在最前面定义件数,钱数初始值都为0
2.循环arr,如果item的buy为ture,则种类自增++,件数为加等于+=item.num,钱数为+=item.num*item.goods_price
3.给模板字符串中的价格进行to.fixed,保留两位小数