您好我正在尝试创建一个简单的客户端购物车,在我的控制器页面加载时我定义了将保存我的项目的数组对象,如果它们未定义或长度为0我将它们设置为&#39 ; []'默认情况下:
$scope.cart = JSON.parse($window.localStorage.getItem('cart')) || [];
$scope.cart.items = $scope.cart.items || [];
这是将项目添加到购物车的功能:
$scope.addItem = function(item) {
if (item.quantity > 0)
{
var cartItem = {
id: item.id,
description: item.class + ' item' + (item.quantity > 1 ? 's' : '') + ' to ' + $scope.details.name,
quantity: item.quantity
}
// Adding item to cart array
$scope.cart.items.push(cartItem)
// Saving cart to storage
$window.localStorage.setItem('cart', JSON.stringify($scope.cart));
// Checking to see if data has indeed been stored in localstorage
console.log(JSON.parse($window.localStorage.getItem('cart')));
}
}
现在我的存储空间中的购物车总是空着,有时候我会玩代码并让它工作(不知道我做了什么)但是当我重新加载页面时,一切都被清除了。
答案 0 :(得分:3)
您正在将cart
初始化为数组,但随后为其分配属性。
它应该是一个对象:
$scope.cart = JSON.parse($window.localStorage.getItem('cart')) || {};
此外,在push
cart
内的数组中需要定义数组之前。
最简单的方法可能是首先在一个对象中提供所有属性:
var newCart = {
tickets:[],
items:[]
}
$scope.cart = JSON.parse($window.localStorage.getItem('cart')) || newCart ;
答案 1 :(得分:0)
您应该检查是否已将值存储为
if(!$window.localStorage.getItem('cart'))
{
// Saving cart to storage
$window.localStorage.setItem('cart', JSON.stringify($scope.cart));
}