刷新页面后调用setItem()时$ windows.localStorage重置

时间:2016-11-13 13:21:11

标签: javascript angularjs ionic-framework

The output以下是我的AddToCart工厂:

.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}}。如何在不重置数据之前存储数据?有什么想法解决或其他方法来取代本地存储?

2 个答案:

答案 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中添加方法,并在此工厂中的任何其他方法之前调用此方法,使用的是任何控制器。