.factory('AddToCart', function ($window) {
var products = {};
products.list = [];
return {
addProduct: function (_sku, _image, _name, _price, _quantity, _remark) {
return products.list.push({
id: products.list.length,
sku: _sku,
image: _image,
name: _name,
price: _price,
quantity: _quantity,
remark: _remark
});
},
updateProduct: function (_id, _sku, _image, _name, _price, _quantity, _remark, _show) {
return products.list[_id] = {
id: _id,
sku: _sku,
image: _image,
name: _name,
price: _price,
quantity: _quantity,
remark: _remark,
show: _show
};
},
saveProduct: function () {
$window.localStorage.setItem("CartProducts", JSON.stringify(products.list));
},
getLocalStorageProduct: function () {
return JSON.parse($window.localStorage.getItem("CartProducts"));
}
}
});
我称之为:
AddToCart.addProduct(....); //save in list
AddToCart.saveProduct(); //save to local storage
然后我输出保存的项目:
AddToCart.getLocalStorageProduct(); //output the list items
好的,到目前为止它完美无缺
问题当我重新加载页面并调用AddProduct()
和SaveProduct()
时,本地存储只是重置之前存储的数据并开始存储来自{的项目{1}}。如何在不重置数据之前存储数据?有什么想法解决或其他方法来取代本地存储?
答案 0 :(得分:1)
根据您附带的屏幕截图,您尝试使用Key CartProducts将产品保存在本地存储中。我不是百分百肯定,但问题是你每次都要覆盖CartProducts的当前值,而不检查是否已经有一个项目。在保存功能中,您应首先检查CartProducts键是否存在任何项目,如果它存在,则应该获取当前数组,转换为JSON并推送数组中的新对象。现在你应该保存它。
尝试使用这样的代码来保存产品。
saveProduct: function () {
var cartProducts = JSON.parse(localStorage.getItem("CartProducts"));
if(cartProducts == null)
{
console.log("CartProducts == null");
$window.localStorage.setItem("CartProducts", JSON.stringify(products.list));
}
else
{
console.log("CartProducts != null");
for(var i = 0; i < cartProducts.length; i++)
{
products.list.push(cartProducts[i]);
}
$window.localStorage.setItem("CartProducts", JSON.stringify(products.list));
}
//$window.localStorage.setItem("CartProducts", JSON.stringify(products.list));
},
答案 1 :(得分:0)
首先应该获得localstorage
值,然后在执行任何操作之前将其添加到products.list
,然后将新产品条目推送到products.list
。通过这个你可以保留localstorage值。
getLocalstore:function()
{
if($window.localStorage.getItem("CartProducts"))
{
this.products.list=JSON.parse($window.localStorage.getItem("CartProducts"));
}
else
{
this.products.list=[];
}
}
在AddToCart
factory中添加方法,并在此工厂中的任何其他方法之前调用此方法,使用的是任何控制器。