2016-11-13 31 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爲你的努力無論如何! –

相關問題