2016-11-13 90 views
0

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 

OK,它可以完美运行至今

问题是当我重新加载页面并调用AddProduct()SaveProduct()时,本地存储只是重置之前存储的数据,并开始存储id1中的项目。如何在不重置数据前存储数据?任何想法解决或其他方法来取代本地存储?

+0

在你的代码中,你从localStorage加载数据?有函数'getLocalStorageProduct'从不使用。 – Dekel

+0

对不起,我的错误在这里,但我仍然没有得到我想要的 –

+0

你是否试图在localstorage中保存一个数组? – Deep

回答

1

根据您所附的屏幕截图,您试图使用Key CartProducts将产品保存在本地存储中。我不是100%确定的,但问题在于,如果每次检查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));    
    },  
+0

我也曾想过这个,但我不确定要检查的编码。你会给我一些提示吗? –

0

你应该先得到localstorage值和部份factorythen你应该推什么都新产品项目是products.list做任何操作之前添加到products.list。由此您可以保留本地存储价值。

getLocalstore:function() 
{ 
    if($window.localStorage.getItem("CartProducts")) 
    { 
        this.products.list=JSON.parse($window.localStorage.getItem("CartProducts")); 
    } 
else 
{ 
this.products.list=[]; 
} 
} 

AddToCart添加方法factory.and调用之前,在这家工厂的任何其他方法,什么都控制器,你正在使用这种方法。

+0

嗯...恐怕这不是我想要的。但thx为你的努力无论如何! –